NSUserDefaults没有加载字符串数组

时间:2012-04-13 10:21:38

标签: iphone nsuserdefaults

在有人说过这个问题以前被多次提出之前,我已经完成了大约20个不同的答案,并尝试了我发现的一切。尽管如此,我只在大约5天前启动了目标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];

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

2 个答案:

答案 0 :(得分:3)

我怀疑错误是以下之一:

  1. defaults未初始化。
  2. 在阅读之前未设置userDefaults
  3. 在读取之前已经覆盖了userDefaults。
  4. 打破每一步,在每一步之前和之后编写测试。

    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语句不使用defaults保持自包含。{/ p>

    将类似的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];

答案 1 :(得分:1)

尝试使用mutableArrayValueForKey检查此link

像这样使用:

fishArrayMutable = [[NSMutableArray alloc] initWithArray:[defaults mutableArrayValueForKey:@"fishArray"]];

它对我有用

修改

写作:

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

负载:

NSMutableArray *array = [defaults mutableArrayValueForKey:@"fishArray"];