我正在尝试将NSArray
个对象保存到NSUserDefaults
,但当我将NSArray
拉回getObject
时,它什么都没有。
我在这里设置了一个断点来计算对象并验证数组中有项目
[[NSUserDefaults standardUserDefaults] setObject:mappingResult.array forKey:kArrayOfFoundThings];
[[NSUserDefaults standardUserDefaults] synchronize];
这是我把它们拉出来的地方,数组里面没有任何内容。
NSArray *allAmbulances = [[NSUserDefaults standardUserDefaults] objectForKey:kArrayOfFoundThings];
答案 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对象?