我正在使用[NSUserDefaults standardUserDefaults]
保存应用偏好设置,其中有几个项目,其中一个是填充字典的数组。我想删除该数组中的第一项,所以我尝试类似:
[[[NSUserDefaults standardUserDefaults] objectForKey:accounts] removeObjectAtIndex:0];
这会删除索引0处的数组项,但不会更新plist文件。但是,当我做的时候
[[NSUserDefaults standardUserDefaults] removeObjectForKey:accounts];
删除所有项目并更新plist文件。为什么第一行不将数据保存为plist?
答案 0 :(得分:3)
文档指出从NSUserDefaults
返回的值是不可变的。我认为这意味着如果您检索一个值(例如通过objectForKey:
),然后修改该值,则更改将不会持久保存到用户默认值。您需要通过setObject:forKey:
自行保留更改。
即使您将可变对象设置为值,NSUserDefaults返回的值也是不可变的。例如,如果将可变字符串设置为“MyStringDefault”的值,则稍后使用stringForKey:检索的字符串将是不可变的。
虽然这有点奇怪但以下似乎有效......(但不会坚持改变)。
[[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"]);
答案 1 :(得分:0)
试试这个。
NSMutableArray *Arr=(NSMutableArray *)[[NSUserDefaults standardUserDefaults] objectForKey:@"YourKey"];
[Arr removeObjectAtIndex:0];
[[NSUserDefaults standardUserDefaults] setObject:Arr forKey:@"YourKey"];
答案 2 :(得分:0)
这是我发现的另一个解决方案,它可以避免启动数组:
//do whatever with [NSUserDefaults standardUserDefaults]
[[NSUserDefaults standardUserDefaults] setBool:randomValue forKey:randomKey];
[[NSUserDefaults standardUserDefaults] synchronize];