将NSArray保存到NSUserDefaults无效

时间:2013-07-08 19:53:31

标签: ios objective-c nsarray nsuserdefaults

我正在尝试将NSArray个对象保存到NSUserDefaults,但当我将NSArray拉回getObject时,它什么都没有。

我在这里设置了一个断点来计算对象并验证数组中有项目

[[NSUserDefaults standardUserDefaults] setObject:mappingResult.array forKey:kArrayOfFoundThings];
[[NSUserDefaults standardUserDefaults] synchronize];

这是我把它们拉出来的地方,数组里面没有任何内容。

NSArray *allAmbulances = [[NSUserDefaults standardUserDefaults] objectForKey:kArrayOfFoundThings]; 

2 个答案:

答案 0 :(得分:5)

假设数组中包含的对象符合NSCoding协议,您可以使用

// let's take the NSString as example
NSArray *array = @[@"foo", @"bar"];

[[NSUserDefaults standardUserDefaults] setObject: [NSKeyedArchiver archivedDataWithRootObject:array] forKey:@"annotationKey"];
NSArray *archivedArray = [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"annotationKey"]] ;

如果它们符合NSCopying协议,那么

// let's take the NSString as example
NSArray *array = @[@"foo", @"bar"];

[[NSUserDefaults standardUserDefaults] setObject: array forKey:@"annotationKey"];
NSArray *archivedArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"annotationKey"] ;

修改

好吧,可能它不适用于符合NSArray协议的NSCopying个对象,但可以说它适用于符合NSCoding协议的对象,正如Brad Larson所指出的那样。以下回答:

Storing custom objects in an NSMutableArray in NSUserDefaults

答案 1 :(得分:1)

文档:

  

value参数只能是属性列表对象:NSData,   NSString,NSNumber,NSDate,NSArray或NSDictionary。对于NSArray和   NSDictionary对象,其内容必须是属性列表对象。

数组的内容是NSData,NSString,NSNumber,NSDate,NSArray还是NSDictionary对象?