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が原因でアプリを終了しています。理由: '*** コレクション <__NSArrayM: 0xa34f6c0> が列挙中に変更されました。

4

4 に答える 4

3

高速列挙と変更コレクションを同時に使用することはできないため、エラー メッセージが表示されます。通常の for ループの使用に頼ることができます。

于 2013-07-17T04:44:08.533 に答える
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 に答える
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 に答える