Как определить правило условного каскадного удаления в Core Data? - PullRequest
4 голосов
/ 14 февраля 2012

Мой граф объектов содержит две сущности: Автор и Книга с отношением один ко многим (один автор может написать много книг)

Мне бы хотелось, чтобы при удалении книги автор также удалялся, но только если в базе данных, связанной с этим автором, нет других книг. (это означает, что автор должен быть удален только после удаления последней книги автора)

Каков наилучший способ сделать это?

Ответы [ 2 ]

3 голосов
/ 14 февраля 2012

Вы можете поместить свою логику удаления в свой метод -prepareForDeletion на NSManagedObject. Тогда вы сможете утверждать любую политику, какую захотите.

1 голос
/ 14 февраля 2012

Хотелось бы, чтобы существовала такая вещь, как правило условного каскадного удаления, но исходя из предположения, что его нет, я использовал обычное правило обнуления, а затем реализовал некоторую специальную обработку для удаления, такую ​​как:

- (IBAction) deleteBook:(id)sender { // or whatever method handles the deletion
    NSManagedObjectContext *context = // get a ref to the context
    Book *bookToDelete = // get the selected book
    if (bookToDelete.authorMember && [bookToDelete.authorMember.bookMembers count] == 1)
        [context deleteObject:bookToDelete.authorMember]; 
   [context deleteObject:bookToDelete];
}
...