Sono un po 'confuso su come funzionano le regole di eliminazione per le relazioni nei Core Data, almeno al di là dei semplici casi descritti nella documentazione.Core Data cancella la relazione rule-to-many, cancella quando è vuota
Molti di questi casi, e la maggior parte delle risposte che ho visto per le domande qui, utilizzano un modello in cui l'oggetto sul lato sinistro di una relazione uno-a-molti "possiede" gli oggetti sul lato destro: ad es. a Person
ha PhoneNumber
s, e se si elimina la persona si eliminano tutti i loro numeri associati. In questo tipo di caso, la soluzione è chiara: Core Data si occuperà di tutto per voi, se si impostano le relazioni in questo modo:
Person --(cascade)-->> PhoneNumber
PhoneNumber --(nullify)--> Person
Quello che mi interessa è l'opposto: A a-molti in cui il "proprietà" è invertita. Ad esempio, potrei estendere il codice di esempio CoreDataBooks per aggiungere un'entità Author
per raccogliere tutte le informazioni su un autore unico in un unico posto. A Book
ha un autore, ma un autore ha molti libri ... ma a noi non interessa gli autori per i quali non elenciamo libri. Pertanto, l'eliminazione di un Author
la cui relazione books
non è vuota non dovrebbe essere consentita e l'eliminazione dell'ultimo Book
con riferimento a un particolare Author
dovrebbe eliminare tale Author
.
posso immaginare un paio di modi per farlo manualmente ... quello che non sono sicuro è:
- ha Core Data ha un modo di fare almeno una parte di questo automaticamente, come con rapporto elimina le regole?
- c'è un modo "canonico" per gestire questo tipo di situazione?
A meno che non succeda qualcos'altro, questo sembra fallire nel caso in cui, ad esempio, entrambi i libri di un autore vengano cancellati contemporaneamente. Sto stampando il valore di author.books.count nel mio corrispondente prepareForDeletion ed è 2 per entrambi i libri. Quindi l'autore non viene mai cancellato. (i nomi delle classi vengono modificati per corrispondere alla domanda ma le relazioni sono uguali.) –