[英]Replacing values in nested NSDictionary duplicates values in NSArray
我正在替换嵌套NSDictionary中的值,但是一旦这样做,它就会复制NSArray中的项目数。 它包含旧条目,以及新修改的条目:
SharedManager *manager = [SharedManager shared];
NSMutableArray *array = [manager.items mutableCopy];
for (NSMutableDictionary *notes in [manager.items mutableCopy]) {
NSMutableDictionary *tempDictionary = [[NSMutableDictionary alloc] init];
tempDictionary = [notes mutableCopy];
[tempDictionary setObject:@1 forKey:@"key"];
[array addObject:tempDictionary];
}
DebugLog(@"%@", [manager items]);
我只是希望将我的旧NSArray替换为新修改的NSArray。
数组在这里接收所有项目
NSMutableArray *array = [manager.items mutableCopy];
然后,您再次将其添加到
[array addObject:tempDictionary];
第一行应替换为
NSMutableArray *array = [NSMutableArray array];
我认为您可能可以更简单地执行此操作。 如果manager.items
是如代码所暗示的可变字典数组,那么您可以更新字典而无需更改保存它们的(不可变)数组:
SharedManager *manager = [SharedManager shared];
for (NSMutableDictionary *notes in manager.items) // loop through every dict in the array
[notes setObject:@1 forKey:@"key"]; // update dict in-place
}
一个可能的解决方案是创建一个新数组,并在最后将其重新分配给manager.items
。
SharedManager *manager = [SharedManager shared];
NSMutableArray *array = [NSMutableArray array];
for (NSDictionary *notes in manager.items) {
NSMutableDictionary *tempDictionary = [notes mutableCopy];
[tempDictionary setObject:@1 forKey:@"key"];
[array addObject:tempDictionary];
}
manager.items = [array copy]; // make it immutable again
DebugLog(@"%@", [manager items]);
您应该从头开始创建新阵列,而不是从现有阵列的副本开始+我建议删除多余的mutableCopy
调用:
SharedManager *manager = [SharedManager shared];
NSMutableArray *array = [NSMutableArray new];
for (NSDictionary *notes in manager.items) {
NSMutableDictionary* newNotes = [notes mutableCopy];
[newNotes setObject:@1 forKey:@"key"];
[array addObject:newNotes];
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.