【发布时间】:2013-12-20 04:27:27
【问题描述】:
我想清楚地了解我做插图时会发生什么:
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 中记录的 Book 实例没有被删除,而是保持存储,对吗? 那么我应该在设置新值之前手动检查它是否存在并删除它,还是有更简洁的方法呢?
【问题讨论】:
-
当你创建 book 的实例(比如 book1)时,就像你做的那样,在数据库中创建一个对象(假设你保存了某个时间)。当您将此对象分配给 peter.favouriteBook=book1 之类的关系时,您只是在建立关系。如果您现在创建另一本书(比如 book2)并将相同的关系分配给 book2(peter.favouriteBook=book2),那么唯一改变的就是关系。 book1 和 book2 仍然存在于 Book 表中。我的猜测是您不想删除 book1,因为它很可能是其他人最喜欢的书!
-
在 Book 上,您可能会考虑有一个名为 Book.favouredBy 的 To-Many 关系,它是 Person.favoriteBook 的倒数。 book1.favouredBy 将返回所有最喜欢的书是 book1 的人的 NSSet。
-
感谢您的清晰解释:)
标签: ios objective-c core-data entity-relationship nsmanagedobject