#import <Foundation/Foundation.h>
@interface Location : NSObject
{
int x_;
int y_;
}
@property(assign) int x;
@property(assign) int y;
@end
#import "Location.h"
@implementation Location
@synthesize x = x_;
@synthesize y = y_;
@end
-(id) calcKey:(int)x theY:(int)y{
Location* loc = [[Location alloc]init];
loc.x = x;
loc.y = y;
return loc;
}
for(id innerObj in arr){
NSMutableDictionary* dic = [NSMutableDictionary dictionary];
for(id innerObj in arr){
MyStorage* storage = (MyStorage*)innerObj;
id key = [self calcKey:storage.x theY:storage.y];
[dic setObject:bri forKey:key];
}
}
嗨,我正在尝试将存储添加到NSMutableDictionary中,我的目的是使用这个字典dic来加速位置(x,y)存储的进一步搜索。但它总是失败...带有以下警告,可以任何人帮助我?非常感谢!:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Location copyWithZone:]: unrecognized selector sent to instance 0x6b4b160'
答案 0 :(得分:0)
由于您使用自定义类Location
的实例作为键,并且在词典中使用时会复制键,因此您必须通过实现copyWithZone:
来实现对复制的支持。
方法名称的“区域”部分是指一些不再使用的旧内存管理方案,因此您可以忽略它。
如评论中所述,您的copyWithZone:
方法应该只创建一个新对象,设置实例变量并返回新实例。您可能还想覆盖isEqual:
和hash
。更多here。