如何成功地将NSObject的NSMutableArray存储到NSUserDefaults?
我尝试了一些东西但它似乎没有用。
这样做的正确方法是什么?
答案 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还声明:
对于
NSArray
和NSDictionary
个对象,其内容必须是属性列表对象。
因此,如果您的数组包含自定义对象,则无法将其放入NSUserDefaults
。