iOS替换对象索引错误

iOS替换对象索引错误,ios,objective-c,nsdictionary,Ios,Objective C,Nsdictionary,我是iOS开发新手,在替换ObjectAtIndex时遇到错误。我的密码有问题吗?请帮忙,谢谢 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

我是iOS开发新手,在替换ObjectAtIndex时遇到错误。我的密码有问题吗?请帮忙,谢谢

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;
        }
    }
}
self.myArray=array;
用于(NSDictionary*数组中的数据){
NSString*fbid=[data objectForKey:@“id”];
for(int index=0;index
错误是:
由于未捕获的异常而终止应用程序,原因:'***集合在枚举时发生了变异。

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

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

您正在迭代
数组
,它等于
self.myArray

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

要解决此问题,只需将
self.array
作为原始数组的可变副本:

self.myArray = [array mutableCopy];

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

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

要解决此问题,只需将
self.array
作为原始数组的可变副本:

self.myArray = [array mutableCopy];

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


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

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

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

您可以

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;
                            }
                        }
                    }
                }
你可以

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


不要让我们玩游戏来获取信息。错误是什么?我猜它是无法识别的选择器。Collection NSArray在枚举时发生了变异。不要让我们玩游戏来获取信息。错误是什么?我猜它是无法识别的选择器。Collection NSArray在枚举时发生了变异。这里有新的示例吗足够参考了。谢谢考虑到这个答案中的一个例子,整个讨论也很好,我在这里遗漏了什么吗?他使用的是通常的for循环,我没有看到任何快速枚举。@abbood
self.myArray=array;for(NSDictionary*数组中的数据)
@abbood yep,这个表单是最初的快速枚举,block way只是围绕它。很抱歉,这里有新的例子可供参考。谢谢考虑到这个答案中的一个例子,整个讨论也很好,我在这里遗漏了什么吗?他使用的是通常的for循环,我没有看到任何快速枚举。@abbood
self.myArray=array;例如(NSDictionary*数组中的数据)
@abbood yep,此表单是原始的快速枚举,块方式只是围绕它。Hi Syed Absar,我遵循您的代码,但我得到以下错误“NSMutableDictionary”的任何可见@interface声明选择器“addObject:forKey:”抱歉,它是setObject,而不是addObject。Hi Syed Absar,我遵循您的代码,但我得到以下结果ing error No visible@interface for'NSMutableDictionary'声明选择器'addObject:forKey:'抱歉,它是setObject而不是addObject。嗨,ggmathur,当我更改为self.myArray=[array mutableCopy]时,我得到了无休止的结果。你知道为什么吗?谢谢,例如1234123411234123441234123411234…嗨,ggmathur,当我更改为self.myArray=[array mutableCopy],我得到了无休止的结果。你知道为什么吗?谢谢,例如1234123411234123441234123411234。。。。