ios - 将 NSArray 保存到 NSUserDefaults 不起作用

标签 ios objective-c nsarray nsuserdefaults

我正在尝试将对象的 NSArray 保存到 NSUserDefaults,但是当我使用 getObject 拉回 NSArray 它不包含任何内容。

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

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

这是我将它们拉出的地方,阵列显示里面什么也没有。

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

最佳答案

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

// 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协议(protocol),那么

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

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

编辑

好的,它可能不适用于符合 NSCopying 协议(protocol)的对象的 NSArray,但可以说它适用于符合 NSCoding 的对象Brad Larson 在以下回答中指出的协议(protocol):

Storing custom objects in an NSMutableArray in NSUserDefaults

关于ios - 将 NSArray 保存到 NSUserDefaults 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17534869/

相关文章:

objective-c - RestKit:JSON 映射不起作用

ios - Xcode 版本之间的 'as' 问题

swift - 在名称数组中添加像字母一样的地址簿

objective-c - NSArray removeLastObject 未声明?

swift - 将 NSCoding 的值转化为字符串 - KeychainWrapper

ios - 如何添加几个 UICollectionReusableView

objective-c - NSUrlConnection 不起作用。我没有得到任何回应

objective-c - 使用 NSTimer 显示每秒帧数时间码

objective-c - Objective C ARC 释放而不分配变量

objective-c - oAuth2 在 iOS7 中检索个人资料电子邮件