我是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;在被列举时被突变。
答案 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]];
}