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