2016-06-30 5 views
2

Ich möchte Objekt aus Array entfernen, aber ich bekomme diesen Fehler. Ich habe relative Fragen gefunden, aber nicht in der Lage zu bekommen. bitte hilf mir. mein CodeMuting-Methode zum Fehler unveränderlich Objekt gesendet, wenn Objekt

NSArray *tripsArray= [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 
NSMutableArray *myTripsArray = [tripsArray mutableCopy]; 
for (NSDictionary *dict in myTripsArray){ 
    if ([[dict valueForKey:@"state"] isEqualToString:@"undeployed"]){ 
     int index = [myTripsArray indexOfObject:dict]; 
     [myTripsArray removeObjectAtIndex:index]; 
    } 
} 
+1

Sind Sie sicher, dass das der Fehler ist, den Sie erhalten? Nicht die Sammlung wurde mutiert, während sie aufgezählt wurde. –

+0

ja @JamesP Ich bekomme den gleichen Fehler – Himanth

+0

Ich war nur ein bisschen verwirrt, als Sie einen anderen Fehler in Ihrer Frage gepostet haben, (die von einem anderen Grund verursacht werden würde). –

Antwort

2

Dies ist aufgrund der Anordnung, die Sie iterieren, sind Sie ein Objekt aus dem gleichen Array zu entfernen.

Ändern Sie diese Zeile:

for (NSDictionary *dict in myTripsArray) 

Um dies:

for (NSDictionary *dict in [myTripsArray copy]) 

Hier habe ich die Kopie des Arrays iterieren und verwendet, um das Original zu mutieren.

+0

danke @Mehul Thakkar es funktioniert gut – Himanth

+0

@himanth, wenn es funktioniert, akzeptieren Sie dies als die Antwort – WMios

1

Versuch dies zu tun:

NSArray *tripsArray = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil]; 

NSMutableArray *myTripsArray = [tripsArray mutableCopy]; 
for (NSDictionary *dict in [myTripsArray copy]){ 
    if ([[dict valueForKey:@"state"] isEqualToString:@"undeployed"]){ 
     int index = [myTripsArray indexOfObject:dict]; 
     [myTripsArray removeObjectAtIndex:index]; 
    } 
} 

// And now myTripsArray will be changed 
1

Sie haben den Fehler, da Sie in Aufzählen Zeit ein Array zu ändern versucht. Sie sollten eine Kopie dieses Arrays erstellen und ein Array zum Aufzählen und ein zweites zum Entfernen verwenden. Oder Sie können alle zu entfernenden Elemente (die Sie in cicle finden) in das zweite Array einfügen und sie dann einfach durch den Aufruf removeObject: entfernen.

Indizes nicht speichern, nachdem der zweite Index zuerst entfernt wurde, kann falsch sein (wenn das zweite Objekt einen höheren Index hat als der erste).