-1

我有一个数组,当我遍历数组时,我也想替换该项目。这是不可能的,如果我这样做会导致崩溃吗?这是代码:

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];
}

只是想知道这在 Objective-C 中是否合法?如果不是,那么这样做的替代方法是什么?

4

2 回答 2

0

你上面的代码看起来不错。

如果它崩溃,则不是由于更改了您的阵列。

但是,在旧式循环(while、for(;;)、dowhile )中,您可以更改其中任何一个 1. 初始化程序(但这仅执行一次) 2. 计数器 3. 条件。

但是在快速枚举的情况下,你不能做所有这些。

因此,如果您将上述代码与 for(... in ...) 合并,它将引发错误,说试图改变一个不可变对象。即使您定义了计数器和/或数组不可变,快速枚举也将它们视为不可变。

于 2013-01-17T07:05:40.030 回答
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;

没有测试过,但是有类似的

于 2013-01-17T10:23:22.243 回答