簡體   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