我想在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。
答案 0 :(得分:1)
您必须确保MyObject实例中包含的所有对象都是属性列表(plist)对象。请参阅this post。
答案 1 :(得分: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];