我有一個實現NSCoding的Objective-C類。我需要以NSDictionary的形式返回此類的實例的表示形式,其中鍵是屬性名稱,值是屬性值。如何利用NSCoding將對象轉換爲NSDictionary?
如何在Objective-C中進行此轉換?
我有一個實現NSCoding的Objective-C類。我需要以NSDictionary的形式返回此類的實例的表示形式,其中鍵是屬性名稱,值是屬性值。如何利用NSCoding將對象轉換爲NSDictionary?
如何在Objective-C中進行此轉換?
創建一個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:
你在字典中想要這個對象。
NSObject有一個方法dictionaryWithValuesForKeys:
。從文檔:
返回一個字典,其中包含由給定數組中的每個鍵 標識的屬性值。
還有一個相應的-setValuesForKeysWithDictionary:
方法。
NSCoding實際上並不在這裏玩。
這不是'NSObject'方法;它來自Key-Value Coding協議。 –
@Jacques Cousteau你確定嗎?協議是否可以執行?我會說它在NSObject中實現,也可能在其他基礎對象(如NSArray)中被覆蓋。 –
是的,我相信這是一種KVC方法。沒有將「NSObject」記錄爲符合KVC。反正有可能(這是一個非正式的協議......)。協議方法必須由每個類實現,如果它們不被繼承。 –
安德魯馬德森說什麼。如果你想使用NSCoding,你必須使用NSKeyedArchiver將你的對象編碼到一個NSData對象,並將NSData放到你的字典中。如果這是令人擔憂的,那麼它將不會是人類可讀的。 Cheers
編輯:重新閱讀您的問題,這是Andrew所說的,因爲您希望在字典中以1:1的比例表示鍵值:NSCoding方法會爲您提供整個對象作爲字典鍵的值。所以,給安德魯+1。
謝謝,這是我最終採取的方法。 – driis