【发布时间】:2015-10-12 18:56:51
【问题描述】:
我正在替换嵌套 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。
【问题讨论】:
-
在循环之后,您似乎没有对
array对象做任何事情。您没有将其分配给任何东西(即 manager.items)——您的意思是? -
是的,因为数组是一个不可变对象,所以我创建了一个新对象。
-
对,但我的意思是,当您最后调试日志
manager.items时,您只是在转储原始数组。您的代码 sn-p 显示您在array上做了大量工作,然后将其丢弃而无需更改管理器指向它。循环后是否需要manager.items = array;? -
代码中充满了冗余。您在 for 语句中为数组创建了一个额外的 mutableCopy,并在每次迭代时分配和初始化一个可变字典,只在下一行将其丢弃,然后正如@BenZotto 所说,您不对
array做任何事情。但假设这是一个疏忽,你在array上调用addObject所以当然你会有更多的元素。你到底想达到什么目的?看起来您应该使用整数数组迭代而不是快速枚举,以便您可以更新索引而不是调用 addObject
标签: ios objective-c