Sto sviluppando un'app per iPhone con Core Data. Tutti i dati dell'utente devono essere sincronizzati con i nostri server. A tale scopo ho creato una sottoclasse di NSOperation che carica nuovi dati dal nostro servizio web e crea oggetti gestiti corrispondenti. Per mantenere le relazioni tra di loro, ogni oggetto viene trasmesso con un remoteID (che è la chiave primaria del DB del server relazionale).Core Data executeFetchRequest genera NSGenericException (la raccolta è stata modificata mentre veniva enumerata)
Diciamo che ci sono due oggetti gestiti: Dipartimento < - >> Dipendente. La sincronizzazione funziona come segue:
carico tutti i reparti da server. Per ogni dipartimento: crea un oggetto Department e imposta il suo remoteID.
Carica tutti i dipendenti dal server. Per ogni dipendente: creare oggetto Dipendente, recuperare il Dipartimento correlato (da remoteID) e assegnarlo al dipendente.
Recupero di un reparto porta alla seguente eccezione:
*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSCFSet: 0x69c8a10> was mutated while being enumerated.<CFBasicHash 0x69c8a10 [0x2d6d380]>{type = mutable set, count = 1424,
entries => <A list of all newly created entities>
*** Call stack at first throw:
0 CoreFoundation 0x02d04919 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x02e525de objc_exception_throw + 47
2 CoreFoundation 0x02d043d9 __NSFastEnumerationMutationHandler + 377
3 CoreData 0x026225d0 -[NSManagedObjectContext executeFetchRequest:error:] + 4400
4 myApp 0x00059de4 +[AppFactory departmentWithRemoteID:inManagedObjectContext:] + 259
L'eccezione non viene generata ogni volta. Lo spostamento del codice sul thread principale risolve il problema. Non ho idea di cosa c'è che non va. Ho creato un nuovo NSManagedObjectContaxt nel thread di sincronizzazione e passato tutti gli oggetti gestiti dal suo NSManagedObjectID.
Qualche idea?
per me questa potrebbe essere la ragione per questo tipo di problema. Qual è il modo migliore per risolvere questi problemi, hai qualche idea di @octy? –
Adeem, una buona risposta alla tua domanda è stata fornita in una discussione collegata: http://stackoverflow.com/questions/3364769/iphone-nsfetchedresultscontroller-with-delegate-and-data-update-from-a-separate – octy