0

Я хотел бы иметь четкое понимание того, что происходит, когда я для иллюстрации:Правильное обновление для взаимоотношений с NSManagedObject в

Book *newBook = [NSEntityDescription insertNewObjectForEntityForName:@"Book" inManagedObjectContext:context]; 
// setting book's attributes 
Person *peter = [Person queryAndReturnBookCollectionWithName:@"Peter Parker"]; // returns already recorded collection with an already set "favorite book" relationship 
peter.favoriteBook = newBook; 

Я думаю, что ранее записанный экземпляр книги в peter.favoriteBook ISN» t удаляется, но остается сохраненным, я прав? Так что я должен вручную проверить, существует ли он и удалить его перед установкой нового значения или есть ли еще более чистый способ сделать это?

+0

Когда вы создаете экземпляр книги (скажем, book1), как и вы, объект создается в базе данных (при условии, что вы когда-нибудь сэкономите). Когда вы назначаете этот объект таким отношениям, как peter.favouriteBook = book1, тогда вы просто устанавливаете отношения. Если теперь вы создадите другую книгу (скажем, book2) и назначьте то же отношение к book2 (peter.favouriteBook = book2), что единственное изменение - это отношения. Оба book1 и book2 все еще существуют в таблице Book. Я предполагаю, что вы не захотите удалить книгу1, потому что это может быть чужой favouriteBook! –

+0

В книге вы можете подумать о том, чтобы иметь отношение To-Many под названием Book.favouredBy, являющееся обратным к Person.favoriteBook. Book1.favouredBy вернет NSSet всех людей, чья любимая книга book1. –

+0

Спасибо за ваши четкие объяснения :) –

ответ

2

Предыдущее значение favoriteBook не удаляется, но этот объект больше не указывает на этот объект. Итак, предыдущий любимыйBook peter будет по-прежнему существовать в основных данных, но peter.favoriteBook вернет новое присвоенное ему значение.

+0

Как я и думал, спасибо. слишком плохо Xcode не включает в себя основной проводник данных –

+0

Но как насчет обратной связи, экземпляр книги, который больше не указывается peter.favourite, по-прежнему указывает на peter? –

+1

нет, как только связь будет нарушена, ни один объект не будет указывать друг на друга. Основные данные осведомлены об обратной зависимости и соответственно обновляют ее –

Смежные вопросы