如何在NSUserDefault中保存我的数据类型?

时间:2012-08-03 02:23:23

标签: iphone nsuserdefaults

我想在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。

2 个答案:

答案 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];