2009-04-02 16 views

答えて

3

は、それは絶対に辞書である必要がありますか。 NSKeyedArchiverは、実際にはNSDictionaryではなく、記憶されたメモ付きの動作を提供し、プロパティリストのシリアル化が自動的にサポートしない多くのオブジェクトをアーカイブできるという特典が追加されています。 CocoaDev wikiにはusing archivers and unarchiversの良い説明があります。

+0

は辞書である必要はなく、優れた点があります。 nskeyedarchiverの優れた例が見つかりませんでした - あなたはブログやスニペットをリンクできますか? –

+0

私が追加したcocoadevリンク、またはHillegass(3rd ed)のMac OS X用Cocoa Programmingの第10章を参照してください。 –

3

のObjective-Cの「辞書などのオブジェクトは、」​​伝わってくる:

NSArray *myAttributes; // Assume this exists 
NSDictionary *dictRepresentation = [object dictionaryWithValuesForKeys:myAttributes]; 
+0

Hmmは[object attributeKeys]です。 http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/nsobject_Class/Reference/Reference.html#//apple_ref/occ/instm/NSObject/attributeKeys iphoneでは利用できませんか? –

+0

そうは思わない。とにかくOS Xでの使用は疑わしいです。クラスを正しく動作させるためには、具体的に記述する必要があります。 Key-Valueコーディングでは、オブジェクトをある程度ディクショナリとして扱うことができますが、Object == Dictionary等価はPythonやJavascriptほど強力ではありません。 – Chuck

+0

Objective-Cランタイム関数を使用してオブジェクトのプロパティを動的に取得することで、部分的にハックすることができますが、ほとんどの場合、それは努力する価値がありません。 – Chuck

1

あなたが望むキーはにObjC-2.0問題のクラスのプロパティは、次のような何かを行うことができます場合:

// Assume MyClass exists 
unsigned int count = 0; 
objc_property_t *properties = class_copyPropertyList([myClassInstance class], &count); 
NSMutableDictionary *propertiesDict = [NSMutableDictionary dictionary]; 
unsigned int i; 
for(i = 0; i < count; ++i) { 
    NSString *propertyName = [NSString stringWithCString:property_getName(properties[i]) encoding:NSASCIIStringEncoding]; 
    id propertyValue = [self valueForKey:propertyName]; 
    if(propertyValue) 
    [propertiesDict setObject:propertyValue forKey:propertyName]; 
} 
free(properties), properties = NULL; 
// Do something with propertiesDict 

これは、単純なクラス拡張である可能性があります。

関連する問題