如何在NSMutableDictionary中插入我自己的obj和key?

时间:2012-06-24 08:06:21

标签: ios nsmutabledictionary

#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'

1 个答案:

答案 0 :(得分:0)

由于您使用自定义类Location的实例作为键,并且在词典中使用时会复制键,因此您必须通过实现copyWithZone:来实现对复制的支持。

方法名称的“区域”部分是指一些不再使用的旧内存管理方案,因此您可以忽略它。

如评论中所述,您的copyWithZone:方法应该只创建一个新对象,设置实例变量并返回新实例。您可能还想覆盖isEqual:hash。更多here