2013-07-17 66 views
0

我是iOS開發新手,遇到replaceObjectAtIndex錯誤。我的代碼有問題嗎?請幫忙。謝謝。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,原因是:「***收藏< __NSArrayM:0xa34f6c0>中同時列舉了突變。

+1

不要讓我們玩遊戲來獲取信息。 **什麼是錯誤**?我的猜測是它是*無法識別的選擇器*。 – borrrden

+1

收集NSArray的是,同時列舉 –

回答

3

您不能使用快速枚舉並同時收集mutate,因此會出現錯誤消息。你可以使用通常的for循環。

+0

對不起新來的,任何例子refer.Thanks –

+0

考慮這個答案的例子突變,整個討論是太偉大,http://stackoverflow.com/a/992910/7437 –

+0

是我在這裏丟失什麼?他*是*使用通常的循環,我沒有看到任何快速枚舉.. – abbood

0

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

再往下,您正在編輯這個數組,當你做:[self.myArray replaceObjectAtIndex:index withObject:person];

要解決這個問題,只是讓self.array原數組的mutableCopy:

self.myArray = [array mutableCopy]; 
+0

嗨ggmathur,當我改變self.myArray = [數組mutableCopy],我得到了無盡的結果。你知道爲什麼嗎?由於Eg.1234,1234,1234,1234,1234,1234,1234 .... –

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

或者,你可以不重複一個枚舉,您可以循環使用普通的起始指針,退出條件和增量爲您在外環已經完成。

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

嗨賽義德Absar,我按照你的代碼,但我得到以下錯誤沒有明顯@interface爲「的NSMutableDictionary」宣佈選擇「ADDOBJECT:forKey :' –

+0

對不起,它是setObject而不是addObject。 –