我使用下面的code.But将我的“自定义按钮”存储在NSUserdefaults中,在将对象转换为NSdata..here“自定义按钮”是UIButton类时,我得到了一个错误"UIImage encodeWithCoder::unrecognized sent to instance“。有人知道为什么吗...?请帮帮我。
Custom_button *lock11 = (Custom_button*)[menu1 viewWithTag:100];
NSLog(@"opened lock1 ========= %@",lock11);
lock11.is_menu_lock_opened = YES;
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:lock11]; //[NSKeyedArchiver archivedDataWithRootObject:lock11];
[prefs setObject:myEncodedObject forKey:@"set1lock"];发布于 2012-04-19 20:07:47
将此方法实现到Custom_button类中
所有对象的initWithCoder和encodeWithCoder
-(id) initWithCoder: (NSCoder *)coder {
self = [[CastInnerListData alloc] init];
if (self != nil) {
self.object1 = [coder decodeObjectForKey:@"object1"];
self.object2 = [coder decodeObjectForKey:@"object2"];
}
return self;
}
-(void) encodeWithCoder: (NSCoder *)coder{
[coder encodeObject:object1 forKey:@"object1"];
[coder encodeObject:object2 forKey:@"object2"];
}For more detail click here
发布于 2012-04-19 20:00:46
NSUserDefaults类为访问浮点型、双精度型、整型、布尔型和URL等常见类型提供了方便的方法。默认对象必须是属性列表,即NSData、NSString、NSNumber、NSDate、NSArray或NSDictionary的实例(或集合的实例组合)。如果要存储任何其他类型的对象,通常应将其存档以创建NSData实例。
没有直接映射到属性列表对象的对象会被发送给编码器并对其内容进行编码,从而转换为NSData。[UIImage encodeWithCoder:]。他们需要遵循NSCoding协议才能正常工作。您会发现UIImage在iOS 5之前并不符合NSCoding协议。如果您想在iOS 5之前部署,您必须自己解决一些问题,方法是在Custom Button类中实现NSCoding并以不同的方式存储图像。
发布于 2012-04-19 19:54:44
好吧,稍微搜索一下,你很快就会得到答案:
https://stackoverflow.com/questions/10227357
复制相似问题