2012-05-10 30 views

回答

3

創建一個NSCoder子類應該很簡單,它的encode<thing>:forKey:方法只是將thing粘貼到字典中,然後可以檢索它。

@implementation DriisDictCoder 
{ 
    NSMutableDictionary * encodedDict; 
} 

- (void)encodeDouble: (double)v forKey: (NSString *)k { 
    [codedDict addObject:[NSNumber numberWithDouble:v] forKey:k]; 
} 

// etc. 

// Custom method 
- (NSDictionary *)dictForEncodedObject { 
    return encodedDict; 
} 

@end 

然後創建您的編碼器的實例,併發送encodeWithCoder:你在字典中想要這個對象。

+0

謝謝,這是我最終採取的方法。 – driis

8

NSObject有一個方法dictionaryWithValuesForKeys:。從文檔:

返回一個字典,其中包含由給定數組中的每個鍵 標識的屬性值。

還有一個相應的-setValuesForKeysWithDictionary:方法。

NSCoding實際上並不在這裏玩。

+0

這不是'NSObject'方法;它來自Key-Value Coding協議。 –

+0

@Jacques Cousteau你確定嗎?協議是否可以執行?我會說它在NSObject中實現,也可能在其他基礎對象(如NSArray)中被覆蓋。 –

+0

是的,我相信這是一種KVC方法。沒有將「NSObject」記錄爲符合KVC。反正有可能(這是一個非正式的協議......)。協議方法必須由每個類實現,如果它們不被繼承。 –

0

安德魯馬德森說什麼。如果你想使用NSCoding,你必須使用NSKeyedArchiver將你的對象編碼到一個NSData對象,並將NSData放到你的字典中。如果這是令人擔憂的,那麼它將不會是人類可讀的。 Cheers

編輯:重新閱讀您的問題,這是Andrew所說的,因爲您希望在字典中以1:1的比例表示鍵值:NSCoding方法會爲您提供整個對象作爲字典鍵的值。所以,給安德魯+1。