iOS replaceObjectAtIndex错误

时间:2013-07-17 04:38:48

标签: ios objective-c nsdictionary

我是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&lt; __ NSArrayM:0xa34f6c0&gt;在被列举时被突变。

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

再往下,当您执行以下操作时,您正在编辑此数组:[self.myArray replaceObjectAtIndex:index withObject:person];

要解决此问题,只需将self.array设为原始数组的mutableCopy:

self.myArray = [array mutableCopy];

答案 2 :(得分: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循环。

答案 3 :(得分: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]];
}