Core data 是否需要调用NSManagedObjectContext deleteObject

Core data 是否需要调用NSManagedObjectContext deleteObject,core-data,nsmanagedobject,nsmanagedobjectcontext,Core Data,Nsmanagedobject,Nsmanagedobjectcontext,您知道如何从NSManagedObject生成一个类,它会为您创建CoreDataGeneratedAccessor @interface SomeManagedObject (CoreDataGeneratedAccessors) - (void)addBookmarkObject:(Bookmark *)value; - (void)removeBookmarkObject:(Bookmark *)value; - (void)addBookmark:(NSSet *)values; -

您知道如何从NSManagedObject生成一个类,它会为您创建CoreDataGeneratedAccessor

@interface SomeManagedObject (CoreDataGeneratedAccessors)

- (void)addBookmarkObject:(Bookmark *)value;
- (void)removeBookmarkObject:(Bookmark *)value;
- (void)addBookmark:(NSSet *)values;
- (void)removeBookmark:(NSSet *)values;
嗯,打电话给……似乎是多余的

[someManagedObject removeBookmarkObject:myBookmark]
接着是

[managedObjectContext deleteObject:myBookmark]
如果确实需要,
removeBookmarkObject
为什么不为我调用
deleteObject
?谁想从数据库中“部分”删除对象


关于这一点,我遗漏了什么?

删除书签对象打破了
SomeManagedObject
书签
之间的关系。这并不意味着删除
书签
,因为这是一个不同的操作,可能相关,也可能无关。它不是“部分”删除,事实上它不是任何类型的删除。这是否有用真的取决于你的具体数据和你如何使用它。您想要中断关系的一些原因可能包括:

  • 您计划将
    书签
    重新分配给
    SomeObject
    的不同实例
  • 这个关系是可选的,这意味着它被允许为零,所以有时候你想要在不删除任何一个对象的情况下破坏一个关系是有道理的

您的特定应用程序可能使用其中一个或两个,或者两者都不使用。无论如何,破坏关系和删除对象不是一回事,甚至是“部分”。

仅仅因为您从关系中删除了
书签,并不一定意味着您希望删除它:拥有一个与任何对象(当前)都不相关的
书签可能是完全有效的。例如,假设
SomeManagedObject
是一个
ShoppingBasket
,而
Bookmark
ShoppingItem
-您是否希望从您的店铺中删除一个
ShoppingItem
,仅仅因为有人将其从
购物篮子中删除

但事实并非如此:如果删除
书签
,则不得留下任何与之相关的
对象。坏事可能(而且通常会)发生。因此,CoreData提供了一种机制(请参阅中的“关系删除规则”),用于在删除源对象时自动处理相关对象。因此,如果使用所需的删除规则配置了关系,则可以使用:

[managedObjectContext deleteObject:myBookmark]
CoreData将整理这些关系。(例如,如果您指定了一个“nullify”删除规则,它将有效地调用

[someManagedObject removeBookmarkObject:myBookmark]

当然,对于所有与
myBookmark
相关的ManagedObject

。。。真是个大傻瓜。我的大脑已经包含了这些知识,但却完全无法将这些概念联系起来,这真是太可笑了。感谢您填写丢失的连接。。。嘿嘿。