繁体   English   中英

替换嵌套NSDictionary中的值重复NSArray中的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM