iphone - NSUserDefaults 不加载字符串数组

标签 iphone nsuserdefaults

在有人说这个问题之前已经被问过很多次之前,我已经浏览了大约 20 个不同的答案,并尝试了我发现的所有内容。尽管如此,我大约 5 天前才开始使用 Objective C,所以可能有一些非常简单的解决方案。

尽管以多种不同的方式调用,但 NSUserDefaults 似乎并未从默认属性列表中加载数组。在继续之前,这是我读取数组的代码:

      fishArrayMutable = [[NSMutableArray alloc] initWithArray:(NSArray*)[defaults objectForKey:@"fishArray"] copyItems:TRUE];

     if (fishArrayMutable == nil)
     {
       fishArrayMutable =  [[NSMutableArray alloc] init];
       UIAlertView *alert = [[UIAlertView alloc] init];
       [alert setTitle:@"fishArray = nil"];
       [alert addButtonWithTitle:@"Ok"];
       [alert show];
       [alert release];
     }

这是我编写数组的代码:

[defaults setObject:fishArrayMutable forKey:@"fishArray"];

[defaults synchronize];

现在这开始成为一个非常令人沮丧的问题,我已经研究了隔离问题的方法,并得出了它在阅读部分的结论。可变数组在头文件中声明。请帮忙,这个问题已经困扰我大约 6 个小时了......

最佳答案

我怀疑错误是以下之一:

  1. defaults 未初始化。
  2. 在阅读之前未设置 userDefaults
  3. userDefaults 会覆盖之前读取的内容。

分解每个步骤并在每个步骤之前和之后编写测试。

1) NSLog fishArrayMutable 用于验证数组内容的位置。
2) 在将 fishArrayMutable 写入默认值 NSLog 后,用户将立即默认。 示例:

NSLog(@"Before writing fishArray: %@", fishArrayMutable);
[defaults setObject:fishArrayMutable forKey:@"fishArray"];
NSLog(@"After writing fishArray: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"fishArray"]);

请注意,NSLog 语句使用默认值来保持它们的自包含性。

执行类似的 NSLog 语句将读取括起来(并使读取成为两个语句):

NSLog(@"Before reading fishArray: %@", [[NSUserDefaults standardUserDefaults] objectForKey:@"fishArray"]);
NSArray *fishArray = [defaults objectForKey:@"fishArray"];
NSLog(@"After reading fishArray: %@", fishArray);
fishArrayMutable = [[NSMutableArray alloc] initWithArray:fishArray copyItems:TRUE];
NSLog(@"After creating fishArrayMutable: %@", fishArrayMutable);

那么问题应该就很明显了。

注意:由于 NSUserDefaults 而不是:
,数组项本身将是不可变的 fishArrayMutable = [[NSMutableArray alloc] initWithArray:fishArray copyItems:TRUE];
您应该能够只使用 mutableCopy:
fishArrayMutable = [fishArray mutableCopy];

关于iphone - NSUserDefaults 不加载字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10139074/

相关文章:

swift - “anyObject”无法转换为 'Dictionary<key, value>]'

swift - 无法从 NSUserDefaults 获取字典作为保存格式

objective-c - ios编程-格式字符串未使用数据参数

ios - 在 iOS 中,当屏幕从纵向旋转到横向时,如何让 textView 展开

ios - 有没有办法在没有用户或服务器干预的情况下唤醒 iOS 中暂停的应用程序

iphone - 在运行时检测我的 iPhone 应用程序是从哪个国家/地区的 App Store 下载的?

iphone - 代码风格:作为属性访问

iphone - 备份 NSUserDefaults 并同步 iPhone

ios - NSUserDefaults 是持久的吗?

ios - 找不到 Cocoapods <RestKit/RestKit.h>