[英]The app crashes when working with data from nsuserdefaults
我有一个类“ MainClass”。 该类实现NSCoding协议。 在该类中,我有一个包含另一个类“ Object”的对象的数组,该类也实现了NSCoding协议。 当我在NSUserDefaults中存档“ MainClass”的对象,然后取消存档并尝试从数组中获取“ Object”类的对象并使用其属性时,我得到以下消息:
[NSConcreteMutableData属性]:无法识别的选择器已发送到实例。
我做错了什么? 如何解决?
编辑:这是我与NSUserDefaults一起使用的代码:
- (Settings *) readData
{
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *dataRepresentingSettings = [currentDefaults objectForKey:@"data"];
if (dataRepresentingSettings != nil) {
return (MainClass *)[NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSettings];
}
return nil;
}
- (void) saveData
{
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:self] forKey:@"data"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
有两种选择:
(1)您没有保留从用户默认中获得的对象。 从NSUserDefaults
获取对象时,该对象会自动释放-如果要保留它,则必须retain
它。
(2)您忘记了对其进行存档。 您使用NSKeyedArchiver
来存档您的对象,但没有取消存档:)
您可能已经做了类似的事情
Object *object = [defaults objectForKey:@"object"];
代替
NSData *data = [defaults objectForKey:@"object"];
Object *object = [NSKeyedUnarchiver unarchiveObjectWithData:data];
注意:不要忘记我的示例中的object
仍然是自动释放的。 如果要保留它,则必须保留它;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.