2012-08-23 56 views
0

我有這個BasicNode接口擴展NSObject。使用NSObject作爲NSDictionary的鍵?

在某個時候,我需要使用它的一個實例作爲關鍵的字典:

BasicNode *node = [BasicNode node]; 
[aMutableDictionary setObject:@"hello" forKey:node] 

這導致程序崩潰,「信號SIGABRT」。在Java中,哈希映射會調用對象的默認哈希方法來獲取其密鑰。是否有一種機制可以在objC中實現以允許使用對象作爲NS(Mutbale)Dictionary的鍵?

+1

堆棧跟蹤崩潰時顯示的內容是什麼? –

+0

***因未捕獲異常'NSInvalidArgumentException'而終止應用程序,原因:' - [BasicNode copyWithZone:]:無法識別的選擇器已發送至實例0x7fee2304f000' *** – Jem

+0

您在帖子中使用的標記足以描述這些技術你正在使用。您不需要在標題中指定。 – davidbuzatto

回答

2

是的,你可以使用一個NSObject繼承作爲重點,但它必須實現

+ (id)copyWithZone:(NSZone *)zone 

方法,這是使用的一個關鍵要求。 要實現它自己的類是這樣的:

- (id)copyWithZone:(NSZone *)zone { 
     MyObject *objectCopy = [[MyObject allocWithZone:zone] init]; 
     // Copy over all instance variables from self to objectCopy. 
     // Use deep copies for all strong pointers, shallow copies for weak. 
     return objectCopy; 
} 

這是this博客文章!

祝你好運!

+0

嗨,鑑於堆棧跟蹤(請參閱上面的註釋),似乎copyWithZone不是一個公認的選擇器? – Jem

+0

你的班級沒有實施NSCopying協議。除非你在自己的BasicNode類中實現了NSCopying,否則不會對-copyWithZone:做出響應。 – ingaham

+0

好的,但在你的第一個答案中你陳述了「你可以使用NSObject繼承作爲Key,因爲它實現了(...)方法」。 – Jem

相關問題