【问题标题】:NSUserDefaults - how to read a saved Array [duplicate]NSUserDefaults - 如何读取保存的数组 [重复]
【发布时间】:2013-08-14 17:58:46
【问题描述】:

我创建了一些 NSUserDefaults,方法是创建一个新的 Settings Bundle 文件,然后用键和值填写它创建的 plist。
我的价值观之一是一个名为“收藏夹”的数组。 我正在尝试使用以下方式加载它:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *tempArray = [[NSArray alloc] init];
tempArray = [defaults arrayForKey:@"favorites"];

我得到的只是(null)

我读到的一篇文章说您必须手动创建 NSArray 并将其保存在您的设置包中,以便它知道它实际上是一个真实有效的数组。真的是这样吗?还是我只是读错了数组?

【问题讨论】:

  • 你能贴出你用来保存数组的代码吗?
  • 听起来好像没有为关键的“收藏夹”保存数组。如果您想这样做,您可以执行 [defaults setObject:tempArray forKey:@"favorites"] 之类的操作,然后您可以像现在一样将该数组从用户默认值中提取出来
  • 新的数组分配不是必须的,也可能是你的key有错别字,这就是为什么我建议你使用常量而不是纯字符串
  • @ErikGodard - 如我的问题所述:我使用 Plist 创建了我的 NSUserDefaults,而不是使用代码。没有用于保存数组的代码。
  • 保存时,让它同步或告诉我你是如何保存到 NSUserDefaults 中的

标签: ios objective-c nsarray nsuserdefaults


【解决方案1】:

看起来没有 NSArray 被存储到 NSUserDefaults 中。

要保存一个空数组试试:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *tempArray = [NSArray array];
[defaults setObject:tempArray forKey:@"favorites"];

现在您应该可以像最初尝试那样拉出阵列了。

要从 plist(与 NSUserDefaults 完全分离的野兽)中提取数据,请尝试:

NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"YourPlistFileName" ofType:@"plist"]];
myArray = dictionary[@"favorites"];

【讨论】:

  • 虽然您的默认值会在某个时候保存,但我建议您在 [defaults setObject..] 之后添加 [defaults synchronize] 以写出您的默认值。
  • 正如我在问题中明确指出的那样,我没有使用代码创建任何数组,而是使用 Settings Bundle 附带的 Plist 创建了数组。而 that 正是我的问题所在:iOS 不能识别使用 Plist 创建的数组吗?你必须用代码让它“接受”吗?
  • 我不记得最初看到任何关于 plist 的内容。使用 plist 与 NSUserDefaults 不同。我已经修改了我的答案以显示如何从 plist 中读取数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
  • 1970-01-01
  • 2011-07-05
  • 2021-04-29
  • 1970-01-01
相关资源
最近更新 更多