我有一个数组,当我遍历数组时,我也想替换该项目。这是不可能的,如果我这样做会引起痉挛吗?这是代码:
for (int i = 0; i < [highlightItemsArray count]; i++){
//replace the from array with the new one
NSMutableDictionary *tempDictionary = [NSMutableDictionary dictionaryWithDictionary:highlightItem];
[tempDictionary setObject:[newHighlightItem objectForKey:@"from"] forKey:@"from"];
[highlightItemsArray replaceObjectAtIndex:i withObject:tempDictionary];
[indexes addIndex:i];
}
只是想知道这在目标C中是否合法?如果没有,那么这样做的替代方案是什么?
答案 0 :(得分:0)
上面的代码看起来不错。
如果它崩溃,则不是因为你的阵列改变了。
然而,在旧式循环中(而对于(;;),dowhile),您可以更改其中的任何一个 1.初始化(但只执行一次) 柜台 3.条件。
但是在快速枚举的情况下,你不能做所有这些。
因此,如果将上面的代码与for(... in ...)合并,则会抛出错误,说试图改变不可变对象。即使你定义了你的计数器和/或数组,不可变的快速枚举也将它们视为不可变的。
答案 1 :(得分:0)
解决这个问题的快速而肮脏的方法是数组副本,即
NSMutableArray *higlightItemsCopy = [highlightItemsArray mutableCopy];
for (int i = 0; i < [highlightItemsArray count]; i++){
//replace the from array with the new one
NSMutableDictionary *tempDictionary = [NSMutableDictionary dictionaryWithDictionary:highlightItem];
[tempDictionary setObject:[newHighlightItem objectForKey:@"from"] forKey:@"from"];
higlightItemsCopy[i] = tempDictionary;
[indexes addIndex:i];
}
highlightItemsArray = higlightItemsCopy;
没有测试过,但有类似的东西