5

我正在尝试将一个NSArray对象保存到NSUserDefaults,但是当我将其拉出NSArray时,getObject它什么都不包含。

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

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

这是我把它们拉出来的地方,数组说里面什么都没有。

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

2 回答 2

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 在以下答案中指出的那样:

在 NSUserDefaults 的 NSMutableArray 中存储自定义对象

于 2013-07-08T20:37:34.390 回答
1

文档:

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

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

于 2013-07-08T20:24:16.917 回答