我需要更新/添加 NSMutableArray 中的键 -> 值对。
如果尚未设置 key ,我想添加一个具有固定值的 key 。
我尝试了以下操作 - 但应用程序在 addObject
处崩溃,并出现“发送到不可变对象(immutable对象)的变异方法”错误:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *bookmarks = [defaults mutableArrayValueForKey:@"bookmarks"];
for (id bookmark in bookmarks) {
if ([bookmark objectForKey:@"type"] == NULL){
[bookmark addObject:@"old" forKey:@"type"];
}
}
[[NSUserDefaults standardUserDefaults] synchronize];
最佳答案
您的外部数组包含不可变字典。一种选择如下:
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *bookmarks = [defaults mutableArrayValueForKey:@"bookmarks"];
[booksmarks enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(NSDictionary *bookmark, NSUInteger index, BOOL *stop) {
if (!bookmark[@"type"]) {
NSMutableDictionary *mutable = [bookmark mutableCopy];
mutable[@"type"] = @"old";
[bookmarks replaceObjectAtIndex:index withObject:[mutable copy]];
}
}];
// Update NSUserDefaults
[[NSUserDefaults standardUserDefaults] setObject:bookmarks forKey:@"bookmarks"];
这应该很高效,因为它可以同时更新多个词典。
关于iOS:在 for 循环中更新 NSMutableArray 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32193597/