存储在NSUserDefaults中的NSMutableArray不会保存数据

时间:2011-08-08 16:48:41

标签: ios cocoa nsmutablearray nsuserdefaults

当用户通过我的iPhone应用登录时,我在NSUserDefaults中创建了一堆默认元素。其中一个是NSMutableArray,我按以下方式添加:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSMutableArray *theArray = [NSMutableArray array];
[prefs setObject:theArray forKey:@"theArray"];

这完美无瑕。但是,当我想从theArray插入或检索值时,出现问题。这是我的应用程序中另一个文件的摘录:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[[prefs objectForKey:@"theArray"] setValue:@"This is a value" forKey:@"aValue"];
NSLog(@"%@", [[prefs objectForKey:@"theArray"] valueForKey:@"aValue"]);

我希望在代码运行时在控制台中看到“这是一个值”,但我得到了这个:

2011-08-08 18:35:17.503 MyApp[7993:10d03] (
)

为什么阵列是空的?我使用NSArray尝试了同样的结果。

2 个答案:

答案 0 :(得分:10)

当您将可变对象存储到NSUserDefaults时,它会存储它的不可变副本,因此您无法像这样直接更改它。您必须从默认值中获取可变副本,更改它,然后将其设置回来,替换默认值中的旧对象。

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
NSMutableArray *mutableArrayCopy = [[prefs objectForKey:@"theArray"] mutableCopy];
[mutableArrayCopy addObject:@"some new value"];
[prefs setObject:mutableArrayCopy forKey:@"theArray"];
[mutableArrayCopy release];

答案 1 :(得分:0)

  

NSArray * savedArray = [NSArray arrayWithObjects:@“obj1”,@“obj2”,@“obj3”,nil];
  NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];
  [userDefaults setObject:savedArray forKey:@“key_for_savedArray”];
  [userDefaults synchronize];

  //要反转数组使用:

  NSArray * retrivedArray = [userDefaults objectForKey:@“key_for_savedArray”];