我有一个封装ABRecordID的类,当它被用作添加到NSMutableDictionary的键时,我得到了运行时异常:
"NSInvalidArgumentException:* -MyRecordId copyWithZone::未识别的选择器发送到实例“
MyRecordId宣布如下:
@interface MyRecordId : NSObject {
ABRecordID abRecordId;
}
-(id)initWithId:(ABRecordID)anABRecordId;
@property (nonatomic) ABRecordID abRecordId;
@end在字典中添加:
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
MyRecordId *recordId = [[MyRecordId alloc] initWithId:anABRecordId];
[dict setObject:@"hello" forKey:recordId];最后一行导致异常..。我知道您不能将非对象类型存储为字典的键,但我认为将其封装在NSObject派生类中会使其正常。
我不应该将ABRecordID存储在其他对象中吗?我应该做点别的吗?
发布于 2009-06-25 18:51:24
使用NSNumber将ABRecordID存储在Obj类中:
[dict setObject:@"hello" forKey:[NSNumber numberWithInt:recordId]];要再次获得recordId,请执行以下操作:
recordId = [[dict objectForKey:@"hello"] intValue];发布于 2009-06-25 17:51:57
NSDictionary密钥需要实现NSCopying协议。这就是为什么它告诉您您的对象不响应copyWithZone:。
发布于 2009-06-25 17:53:24
作为键值的对象的类应该符合NSCopying协议。基本上,它应该实现copyWithZone:方法。
与其使用自己的类包装非对象变量,不如使用NSValue类,它是为此目的而设计的,支持NSCopying协议。
https://stackoverflow.com/questions/1045270
复制相似问题