2013-02-12 20 views
9

Ho un programma che funziona perfettamente. Nessun arresto anomalo, nessun bug o altro, ma quando si tratta di eliminare un oggetto NSManagedObject, nella console appare il seguente messaggio.Annotazione dei dati principali - Riparare la mancata eliminazione della propagazione

Core Data: annotation: repairing missing delete propagation for to-one relationship 

E poi, alcuni dettagli sulla relazione.

Ancora una volta, ciò non provoca l'arresto anomalo dell'app e il programma continua a funzionare come previsto, ma ciò mi preoccupa. Dovrei fare qualcosa al riguardo o va bene avere alcune annotazioni da Core Data?

Grazie in anticipo :)

+0

La stessa cosa mi sta succedendo, stai usando contesti nidificati? – thewormsterror

+0

No, solo lo stack regolare dei Core Data. – user2006934

risposta

4

è necessario salvare contesto dopo l'eliminazione di un oggetto gestito.

Dopo l'eliminazione di qualcosa:

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
NSError *error; 
if (![appDelegate.managedObjectContext save:&error]) { 
    NSLog(@"Error in Appdelegate>getLocalVersionAddFirstVersion"); 
} 

Proprio come un nuovo oggetto non viene salvato al negozio fino a quando il contesto è salvato, un oggetto eliminato non viene rimosso dal negozio fino a quando il contesto viene salvato . (Apple Documentation)

+1

Questa risposta mi porta alla soluzione giusta. –

4

Ho avuto lo stesso problema ed è andato via, non appena ho aggiunto una relazione inversa per la relazione in questione.

+0

Questo ha risolto il problema anche per me. Qualche idea del perché? – andershqst

+0

No. Posso solo citare la guida Core Data Programming che dice in diverse occasioni che ** le relazioni inverse ** sono molto importanti da impostare: _ "Le caratteristiche più importanti rispetto all'integrità del grafico oggetto, tuttavia, sono la relazione inversa e la regola di cancellazione. "_, _" In genere, dovresti modellare le relazioni in entrambe le direzioni e specificare le relazioni inverse in modo appropriato. "_ – MartinW

6

È necessario adottare una strategia migliore in fase di eliminazione.

  1. Vai al tuo .xcdatamodeld, selezionare la relazione in questione
  2. Selezionare il soggetto e il rapporto con una relazione inversa
  3. scegliere cosa fare su Elimina regola

    enter image description here

0

Per me era un problema leggermente diverso: c'era un rilevamento orfano sul posto che ha rimosso subito l'oggetto appena creato quando è stato salvato, perché ho dimenticato di aggiungere la nuova relazione genitore alla funzione isOrphan(). Stranamente questo porta esattamente a questo errore ...

Problemi correlati