自定义字典键对象需要重写下面3个方法(需要实现以下三个方法,我也是网上查的资料,但是我很好奇,他们怎么知道要实现这些方法,是从官方文档知道的吗,还是怎样,如果有哪位大牛知道,还请赐教。。。。我也查了官方资料,但是一点都看不出来需要实现这几个方法就行。。)
遵守NSCoding协议
①,copyWithZone:这个是必须重写的,否则直接报找不到方法的错误
②,hash:这个你可以不重写,主要是我不知道怎么写
③,isEqual: 这个方法必须要重写一下,你不重写的话,默认的实现就是对比两个对象的内存地址
只有在两个对象是同一个对象的时候,才会返回 YES。
当然这个不是我们所需要的,我们需要的就是直接构造一个新的键对象,只要这个新构造的键对象中所包含的数据
与字典中的键相一致了,就取出字典中那个键对象所对应着的值对象~
以下是我的小demo
#import <Foundation/Foundation.h>
@interface RoomInfoKey : NSObject <NSCoding>
@property (nonatomic,copy) NSString *rtypeId;
@property (nonatomic,copy) NSString *roomId;
- (id)copyWithZone:(NSZone *)zone;
@end
#import "RoomInfoKey.h"
@interface RoomInfoKey()
@end
@implementation RoomInfoKey
//- (id)copyWithZone:(NSZone *)zone
//{
// RoomInfoKey *roomInfoKey = [[RoomInfoKey alloc] init];
// roomInfoKey.rtypeId = self.rtypeId;
// roomInfoKey.roomId = self.roomId;
// return roomInfoKey;
//
//}
- (id)copyWithZone:(NSZone *)zone
{
id aCopy = [[[self class] alloc]init];
if (aCopy) {
[aCopy setRoomId:[self.roomId copyWithZone:zone]];
[aCopy setRtypeId:[self.rtypeId copyWithZone:zone]];
}
return aCopy;
}
- (BOOL)isEqual:(id)object
{
if ([object isKindOfClass:self.class] && [((RoomInfoKey *)object).rtypeId isEqualToString:self.rtypeId] && [((RoomInfoKey *)object).roomId isEqualToString:self.roomId]) {
return YES;
}
return NO;
}
- (NSUInteger)hash
{
return 0;
}
@end