2014-07-30 12 views
10

(Usando swift/Xcode beta 3)colpa Rapporto con i dati di base

Ho due entità nel mio progetto - una controllante che ha una relazione uno-a-molti con i suoi figli. Quando aggiungi nuovi oggetti prima di salvare il contesto, tutto funziona correttamente. Tuttavia, dopo aver riavviato l'app e recuperato di nuovo l'oggetto genitore, ricevo un 'errore di relazione' per tutti i suoi figli. Questo è come mi risparmio mio contesto:

func saveContext() { 
    var error: NSError? = nil 
    let appDel:AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
    let context = appDel.managedObjectContext 

    if context == nil { 
     return 
    } 
    if !context.hasChanges { 
     return 
    } 
    if context.save(&error) { 
     return 
    } 

    println("Error saving context: \(error?.localizedDescription)\n\(error?.userInfo)") 
    abort() 
} 

Ho provato a cambiare includesSubentities = vero e setReturnsObjectsAsFaults = falsi ma non sembra aiutare. La maggior parte delle risposte al problema della "relazione difettosa" con Objective-C sembravano utilizzare setRelationshipKeyPathsForPrefetching ma sembra che utilizzarlo con NSFetchRequest in Swift sia impossibile.

C'è qualcosa che mi manca?

+0

L'errore di relazione va bene. In termini di dati fondamentali, l'errore non è l'oggetto reale. Non è stato ancora realizzato, quindi quando si tenta di accedere alle proprietà, esso va e recupera dall'archivio persistente e quindi l'oggetto si accumula. – Sandeep

+0

Ehi, grazie per la risposta. Purtroppo non riesco a recuperare quegli oggetti figlio e semplicemente accedervi non fa il lavoro. –

+0

Si prega di mostrare il codice come si tenta di recuperare il genitore e i suoi oggetti figlio. – zisoft

risposta

2

Come dice GeneratorOfOne, l'errore indica che l'oggetto non è stato ancora caricato nella memoria. E tu hai ragione che "non puoi ottenere quegli oggetti figli da recuperare e semplicemente accedervi non fa il lavoro". Per determinare il recupero dell'oggetto, è necessario valutare una proprietà dell'oggetto, ovvero utilizzare effettivamente un valore dall'oggetto.

0

Questo è normale. Ti dà il problema di errore a meno che tu non usi l'oggetto, vuoi caricare nella memoria finché non lo usi

Problemi correlati