替换嵌套NSDictionary中的值会复制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
}

您应该从头开始创建新数组,而不是使用现有数组的副本+我建议删除冗余的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]);

最新更新