2

我想在 NSUserDefault 中临时保存我的数据类型。这个数据后来拉回来了。

我试图遵循代码。

MyObject *myObject = [[MyObject alloc] init];

[[NSUserDefaults standardUserDefaults] setObject:myObject forKey:@"kMyObject"];

但控制台显示以下消息给我发短信。

-[NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '<MyObject: 0x4aadb0>' of class 'MyObject'.  Note that dictionaries and arrays in property lists must also contain only property values.

我可以忽略这些消息并强制退出 NSUserDefault。

MyObject *getObject = [[NSUserDefaults standardUserDefaults] objectForKey:@"kMyObject"]; 

但是,不归还原始数据。(我检查了 NSLog,返回 Null。)

如何解决这个问题呢?我只喜欢保存到 NSUserDefaults。不建议我使用 CoreData。

4

2 回答 2

1

您必须确保 MyObject 实例中包含的所有对象都是属性列表 (plist) 对象。请看这篇文章

于 2012-08-03T03:15:20.427 回答
1

许多开发者向 NSKeyedArchiver 推荐利用这个概念。但它必须实现 NSCopy NSCoding 的协议,因为有些可能很复杂。不仅如此,还有更简单的方法。参考以下代码。

节省

    MyObject *myObject = [[MyObject alloc] init];

    NSData *myObjectData  = [NSData dataWithBytes:(void *)&myObject length:sizeof(myObject)];

    [[NSUserDefaults standardUserDefaults] setObject:myObjectData forKey:@"kMyObjectData"];

加载

    NSData *getData = [[NSData alloc] initWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"kMyObjectData"]];

    MyObject *getObject;

    [getData getBytes:&getObject];
于 2012-08-03T04:40:04.183 回答