繁体   English   中英

使用nsuserdefaults中的数据时,应用程序崩溃

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM