2012-08-23 34 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

相关问题