我在核心数据中看到了很多有关批量删除的问题,但似乎没有一个能解决我的问题。核心数据NSBatchDeleteRequest似乎在上下文中留下对象
我正在使用Core Data创建iOS 9/Swift应用程序。在今年的WWDC上,我参加了Core Data会议,看到我可以使用NSBatchDeleteRequest
直接从持久存储区中删除大量对象。这对我而言适用于某些对象,但不适用于其他对象,我认为这与我的关系有关。
我具有由Subject
和Course
,那里有一对多的关系的对象图。受试者可以拥有任意数量的课程。
有一个“课程”上Subject
与Cascade
删除规则的关系,因为我想用一个subject
相关联的所有课程时,一个subject
被删除到被删除。
在Course
上的反例是'subject',其删除规则为Nullify
。在这里,我有点困惑,因为苹果的描述Nullify
:
删除对象之间的关系,但不删除任何对象。 这只有在员工的部门关系是可选的,或者确保在下一次保存操作之前为每位员工设置新部门时才有意义。
这使得它很清楚,但为什么要删除关系但不是两个对象?如果我删除Course
,我想Course
被删除,而从subject
到course
的关系被删除,这样的故障已删除的Course
不会在NSSet
上Subject
的courses
集出现。
我想提供一种方法来删除实体中的所有对象。当我尝试通过单独提取和删除course
,courses
被正确删除并从NSSet
courses
Subject
中删除。
因为我不知道有多少courses
会出现,我想确保在任何情况下的高性能,我想我会使用批量删除来删除所有courses
。问题是,虽然利用NSBatchDeleteRequest
删除所有Subjects
工作正常,沿途删除所有courses
(由于Cascade
规则),尝试删除所有Courses
使用此方法似乎留下所有对象的位置。
我以前NSBatchDeleteRequest
删除所有Courses
,但后来当我查询MOC
看什么Subjects
和Courses
依然存在,仍返回两个Courses
和Subject
拥有他们仍然对它们的引用。
相反,当我取,并分别删除每个Course
,我后来取正常显示所有Courses
并在Subject
的“课程”的关系似乎已经适当修改一个空数组。
是的,我在执行请求后保存上下文。我想上下文可能不会通知商店做什么,但然后再次删除所有subjects
工作得很好。这里发生了什么?
批删除无视删除规则。 https://stackoverflow.com/questions/32915874/can-i-use-nsbatchdeleterequest-on-entities-with-relationships-that-have-delete-r/46073965#46073965 – LShi