我想存储一组键值对,其中键是我自己的对象(object a),继承自nsobject,值是int。
我想用一本易变字典。我知道您只能在字典中存储对象类型,因此我有以下内容:
id value = [NSNumber numberWithInt:my_number];
[[self dictionary] setObject:value forKey:myObjectA];
现在,这给了我一个错误,说
-[对象a copyWithZone:]:发送到实例的选择器无法识别
这很好,我知道对象密钥需要实现nscopying协议。不过,我后来读到,可以通过使用nsvalue包装对象来实现这一点。
有人能解释一下我是如何包装我的物品的吗?然后我怎样才能通过钥匙找到价值?我还可以使用
dictionary objectForKey:myObjectA
吗?还是在搜索时必须用nsvalue对象包装myobjecta?还是应该在自定义类上实现nscoping,或者使用字符串键?我正在寻找使用字典的最简单和最简单的方法,如果必须的话,我将实现一个字符串键并使用setvalue:for key:代替,但是如果可以的话,我宁愿使用对象键。
最佳答案
字典键总是被复制的。所以您只需要为您的类实现NSCopying协议,这只是copyWithZone:
方法。
另外,您应该为您的类实现isEqual:
方法。
编辑:如何实现copyWithZone:
取决于许多因素(主要因素:深度拷贝与浅层拷贝)。请参阅Apple的Implementing Object Copy指南和this SO answer。