我在覈心數據中看到了很多有關批量刪除的問題,但似乎沒有一個能解決我的問題。核心數據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