我正在替换嵌套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
}
您应该从头开始创建新数组,而不是使用现有数组的副本+我建议删除冗余的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];
}
一个可能的解决方案是创建一个新的数组,并在结束时将其重新分配给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]);