【问题标题】:Retrieval of NSArray from NSUserDefaults returns empty array从 NSUserDefaults 检索 NSArray 返回空数组
【发布时间】:2013-03-25 21:33:38
【问题描述】:

我遇到NSUserDefaults 的奇怪行为。我最初将一个数组存储到我的 AppDelegate.m 中的用户默认值:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *weekdayIDs = [defaults objectForKey:@"weekdayIDs"];

if (weekdayIDs == nil) {
weekdayIDs = [NSArray arrayWithObjects:@"su", @"mo", @"tu", @"we", @"th", @"fr", @"sa", nil];
[defaults setObject:weekdayIDs forKey:@"weekdayIDs"];
}

[defaults synchronize];

现在在不同的视图控制器 ContentViewController.m 中,我想检索数组:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *weekdayIDs = [defaults objectForKey:@"weekdayIDs"];

但我只是得到一个没有对象的数组,尽管它是count == 7。我也使用了arrayForKey:,但结果相同。我从断点添加了一个屏幕截图。

我经常使用NSUserDefaults,但目前我有点坚持。这可能是一个愚蠢的错误,有人愿意帮忙吗?

非常感谢!

-- 更新:

我还认为最初可能是 NSArray 的 init 存在问题,但即使将其对象替换为手动创建的 NSString *dwid_su = [NSString stringWithString:@"su"]; 也不起作用。

【问题讨论】:

  • 嗨,朱利安。你试过NSLog你的阵列吗?另外,如果您在调试器控制台中执行po weekdayIDs,您会得到什么?
  • 非常感谢您的评论,您是对的。我的数组工作得很好。
  • 我是这么认为的,如果您对为什么首先遇到问题感兴趣,这里是答案stackoverflow.com/questions/10963268/…

标签: iphone objective-c nsstring nsarray nsuserdefaults


【解决方案1】:

您的代码完美运行。

只需打印数组的描述,你就会看到你想要什么。

右击weekdayIDs变量并选择打印weekdayIDs的描述

或通过lldb调试器控制台po weekdayIDs使用

NSLog(@"%@", weekdayIDs);

这里是结果。

【讨论】:

  • 你是对的,非常感谢。我认为阵列是问题所在,并且被引导到错误的轨道上,因为错误在其他地方。但现在我明白了。 PS:德国已经晚上11点了。 :-S
  • @Julian 仅在数组为零时进行同步。如果您只使用您发布的代码的 sn-p,否则保持原样。但我想你写了其他默认值......
  • 没错。我必须初始化一些默认值。
猜你喜欢
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多