我是否需要调用 NSManagedObjectContext deleteObject
Do I need to call NSManagedObjectContext deleteObject
您知道如何从 NSManagedObject 生成 class,它会为您创建 CoreDataGeneratedAccessors...
@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
?谁会想要 'partially' 从他们的数据库中删除一个对象??
我错过了什么?
removeBookmarkObject
打破了 SomeManagedObject
和 Bookmark
之间的关系。这并不意味着删除 Bookmark
,因为这是可能相关也可能不相关的不同操作。这不是 "partial" 删除,事实上它不是任何类型的删除。这是否有用实际上取决于您的特定数据以及您如何使用它。您想要中断关系的一些原因可能包括:
- 您计划将
Bookmark
重新分配给 SomeObject
的另一个实例。
- 此关系是可选的,这意味着它可以为零,因此有时您希望在不删除任何对象的情况下中断关系是有道理的。
您的特定应用可能会使用其中之一或两者,或两者都不使用。无论如何,打破关系和删除对象不是一回事,甚至 "partially".
只是因为您从关系中删除了 Bookmark
,并不一定意味着您希望删除它:拥有一个 Bookmark
可能是完全有效的,但(目前)与任何对象有关。例如,假设 SomeManagedObject
是 ShoppingBasket
,而 Bookmark
是 ShoppingItem
- 您是否想从您的商店中删除 ShoppingItem
,只是因为有人删除了它来自他们的 ShoppingBasket
?
但反之则不然:如果您删除 Bookmark
,则不能留下任何与之相关的 Objects
。坏事可能(而且通常会)发生。因此,CoreData 提供了一种机制(参见 Core Data Programming Guide 中的 "Relationship Delete Rules"),当您删除源对象时自动处理相关对象。因此,如果关系配置了您想要的删除规则,您可以只使用:
[managedObjectContext deleteObject:myBookmark]
CoreData 会理清关系。 (例如,如果您指定了 "nullify" 删除规则,它会有效地调用
[someManagedObject removeBookmarkObject:myBookmark]
对于与 myBookmark
相关的所有 managedObjects。)
您知道如何从 NSManagedObject 生成 class,它会为您创建 CoreDataGeneratedAccessors...
@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
?谁会想要 'partially' 从他们的数据库中删除一个对象??
我错过了什么?
removeBookmarkObject
打破了 SomeManagedObject
和 Bookmark
之间的关系。这并不意味着删除 Bookmark
,因为这是可能相关也可能不相关的不同操作。这不是 "partial" 删除,事实上它不是任何类型的删除。这是否有用实际上取决于您的特定数据以及您如何使用它。您想要中断关系的一些原因可能包括:
- 您计划将
Bookmark
重新分配给SomeObject
的另一个实例。 - 此关系是可选的,这意味着它可以为零,因此有时您希望在不删除任何对象的情况下中断关系是有道理的。
您的特定应用可能会使用其中之一或两者,或两者都不使用。无论如何,打破关系和删除对象不是一回事,甚至 "partially".
只是因为您从关系中删除了 Bookmark
,并不一定意味着您希望删除它:拥有一个 Bookmark
可能是完全有效的,但(目前)与任何对象有关。例如,假设 SomeManagedObject
是 ShoppingBasket
,而 Bookmark
是 ShoppingItem
- 您是否想从您的商店中删除 ShoppingItem
,只是因为有人删除了它来自他们的 ShoppingBasket
?
但反之则不然:如果您删除 Bookmark
,则不能留下任何与之相关的 Objects
。坏事可能(而且通常会)发生。因此,CoreData 提供了一种机制(参见 Core Data Programming Guide 中的 "Relationship Delete Rules"),当您删除源对象时自动处理相关对象。因此,如果关系配置了您想要的删除规则,您可以只使用:
[managedObjectContext deleteObject:myBookmark]
CoreData 会理清关系。 (例如,如果您指定了 "nullify" 删除规则,它会有效地调用
[someManagedObject removeBookmarkObject:myBookmark]
对于与 myBookmark
相关的所有 managedObjects。)