0

我是 iOS 开发新手,replaceObjectAtIndex 时遇到错误。我的代码有问题吗?请帮忙。谢谢。

self.myArray =array;
for (NSDictionary *data in array) {
NSString *fbid = [data objectForKey:@"id"];

for (int index = 0; index < self.myPersonArray.count; index ++) {

    for (IP_PERSON *person in self.myPersonArray) {
        if ([person.UserDef2 isEqualToString:fbid]) {
            [self.myArray replaceObjectAtIndex:index withObject:person];
            break;
        }
    }
}

错误是:由于未捕获的异常而终止应用程序NSGenericException,原因:'*** Collection <__NSArrayM: 0xa34f6c0> 在枚举时发生了变异。

4

4 回答 4

3

您不能同时使用快速枚举和变异集合,因此会出现错误消息。您可以诉诸使用通常的 for 循环。

于 2013-07-17T04:44:08.533 回答
0

你可以..

NSMutableDictionary *dictionary = [NSMutableDictionary dictionary]
self.myArray =array;
for (NSDictionary *data in array) {
NSString *fbid = [data objectForKey:@"id"];

                    for (int index = 0; index < self.myPersonArray.count; index ++) {

                        for (IP_PERSON *person in self.myPersonArray) {
                            if ([person.UserDef2 isEqualToString:fbid]) {
                                    [dictionary setObject:person forKey:@(index)]; //Notice this line
                                break;
                            }
                        }
                    }
                }

接着..

for(id key in dictionary) {
  [self.myArray replaceObjectAtIndex:[key intValue] withObject:[dictionary objectForKey:key]];
}
于 2013-07-17T05:06:40.760 回答
0

您正在迭代array,这等于self.myArray

再往下,当你这样做时,你正在编辑这个数组: [self.myArray replaceObjectAtIndex:index withObject:person];

要解决此问题,只需制作self.array原始数组的 mutableCopy:

self.myArray = [array mutableCopy];
于 2013-07-17T04:47:07.593 回答
0

您可以采用另一个临时数组并迭代该数组,因此您正在枚举和变异不同的数组。

NSArray *tempArray = [yourArray copy];
for (IP_PERSON *person in tempArray) {
    if ([person.UserDef2 isEqualToString:fbid]) {
        [self.myArray replaceObjectAtIndex:index withObject:person];
        break;
   }
}
[tempArray release];

或者,您可以在没有枚举器的情况下进行迭代,您可以使用带有起始索引、退出条件和增量的常规 for 循环,就像在外循环中所做的那样。

于 2013-07-17T04:47:33.033 回答