我正在使用[NSUserDefaults standardUserDefaults]
保存应用程序首选项,其中有一些项目,其中之一是一个充满字典的数组。我想删除该数组中的第一项,所以我尝试如下操作:
[[[NSUserDefaults standardUserDefaults] objectForKey:accounts] removeObjectAtIndex:0];
这确实会删除索引 0 处的数组项,但不会更新 plist 文件。但是,当我这样做时
[[NSUserDefaults standardUserDefaults] removeObjectForKey:accounts];
它会删除所有项目并更新 plist 文件。为什么第一行不将数据保存到plist?
最佳答案
文档指出从 NSUserDefaults
返回的值是不可变的。我认为这意味着如果您检索一个值(例如通过 objectForKey:
),然后修改该值,则更改将不会保留回用户默认值。您需要通过 setObject:forKey:
自行保存更改。
Values returned from NSUserDefaults are immutable, even if you set a mutable object as the value. For example, if you set a mutable string as the value for "MyStringDefault", the string you later retrieve using stringForKey: will be immutable.
虽然真正奇怪的是以下内容似乎有效......(但不会持久更改)。
[[NSUserDefaults standardUserDefaults] setObject:@[@{@"hello" : @"1234"}, @{@"bye" : @"aoeu"}] forKey:@"accounts"];
// Outputs both dictionaries
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"accounts"]);
[[[NSUserDefaults standardUserDefaults] objectForKey:@"accounts"] removeObjectAtIndex:0];
// Outputs only 1 dictionary
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"accounts"]);
关于objective-c - NS用户默认值 : Updating data in plist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13597421/