2010-03-04 11 views
9

Ho un'applicazione che scarica/analizza un grande file XML e memorizza le informazioni utilizzando i dati principali (circa 4000 oggetti (entità)). L'XML viene caricato/analizzato in un thread diverso, che ha il proprio NSManagedObjectContext.Problema dei dati di base dell'iPhone: referenceData64 definito solo per la classe astratta

Quando si tenta di salvare le entità al negozio persistente, a volte ottengo il seguente errore (circa il 20%)

2010-03-03 23: 41: 42,802 xxx [7487: 4203] Eccezione in XML risparmio
2010-03-03 23: 41: 42.802 xxx [7487: 4203] Descrizione: * -_referenceData64 definito solo per la classe astratta. Definisci - [NSTemporaryObjectID_default _referenceData64]!
2010-03-03 23: 41: 42,803 xxx [7487: 4203] Nome: NSInvalidArgumentException
2010-03-03 23: 41: 42,804 xxx [7487: 4203] UserInfo: (null)
2010-03- 03 23: 41: 42.805 xxx [7487: 4203] Motivo: *
-_referenceData64 definito solo per la classe astratta. Definisci - [NSTemporaryObjectID_default _referenceData64]!

Ho un numero intero semplice per tenere traccia delle entità create dall'applicazione rispetto alla proprietà insertedObjects in NSManagedObjectContext prima di salvare, e quando ottengo l'errore, questi numeri non corrispondono, insertedObjects nel NSManagedObjectContext manca circa 10 entità.

Non so come dovrei continuare a indagare su questo problema, qualcuno ha qualche idea su come risolvere questo problema?

Grazie /oscar

risposta

5

Ho avuto lo stesso problema con i dati principali e le operazioni multithreading. Leggere questo article per la comprensione del problema.

Nel thread di lavoro ho iniziato a utilizzare le funzioni lock, sbloccare per NSManagedObjectContext e crash non ripetere più.

+0

Sottocategoria * sottocategoria = (Sottocategoria *) [oggetto self.managedObjectContextWithID: currentSubcategory.objectID]; Questo ha risolto il problema per me. – 3lvis

+5

il collegamento dell'articolo è rotto. – ericg

+0

La tua soluzione funziona per me. Personalmente stavo iterando ALAssetsLibrary usando i blocchi. All'interno di ogni blocco stavo scrivendo su CD. Ho incapsulato il contenuto del blocco in @syncrhonized () e funziona alla grande ora. Grazie! – VaporwareWolf

1

Utilizzate sottoclassi NSManagedObject personalizzate per le vostre entità? Questo problema può verificarsi se si eseguono inizializzazioni errate ecc. In initWithEntity:insertIntoManagedObjectContext:

Problemi correlati