将NSObject存储在NSUserDefaults中的NSMutableArray中

时间:2011-02-21 19:14:27

标签: iphone objective-c cocoa-touch

如何成功地将NSObject的NSMutableArray存储到NSUserDefaults?

我尝试了一些东西但它似乎没有用。

这样做的正确方法是什么?

2 个答案:

答案 0 :(得分:4)

来自文档:

  

请注意,默认值可以是   只有属性列表对象:NSData,   NSString,NSNumber,NSDate,NSArray,   或NSDictionary。

因此,您无法存储自定义NSObject

您可以做的是创建一个方法,将您的对象转换为带有键的字典。

您还需要一种方法将该字典放入您的对象中。

一旦你有NSObjects属性列表对象,你就可以使用:

//ObjectA could be a representation of your object using an NSDictionary.
NSMutableArray *objects = [[NSMutableArray alloc] initWithObjects:objectA, objectB, objectC, nil];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:objects forKey:@"StoredArray"];
[objects release];
//To save changes immediately
[defaults synchronize];

答案 1 :(得分:1)

来自NSUserDefaults文档页面:

  

NSUserDefaults返回的值是 immutable ,即使您将可变对象设置为值也是如此。例如,如果将可变字符串设置为"MyStringDefault"的值,则稍后使用stringForKey:检索的字符串将是不可变的。

您始终可以使用以下命令将不可变数组转换为可变数组:

NSMutableArray *mutable = [NSMutableArray arrayWithArray:immutable];

正如Zebs已经指出的那样,你只能将可以删除的对象存储到NSUserDefaults(NSString,NSArray,NSDictionary,NSData,NSDate和NSNumber)中。 documentation还声明:

  

对于NSArrayNSDictionary个对象,其内容必须是属性列表对象。

因此,如果您的数组包含自定义对象,则无法将其放入NSUserDefaults