2009-08-11 121 views
2

我不認爲類NSDeleteRequest存在,但我希望它。有沒有辦法使用NSPredicate發出NSDeleteRequest與核心數據中的NSFetchRequest?

我可以做一個NSPredicate和使用NSFetchRequest發行:

SELECT * FROM foo其中X = Y

我怎樣才能發出:

從富刪除其中X = Y

刪除1000行的唯一方法似乎是獲取它們,循環它們並調用每個NSManagedObject的delete。是對的嗎?爲什麼我不能只發出1個刪除sql語句?

+1

您必須遍歷數組並逐個刪除它們,但只需告知託管對象上下文,您正在執行批處理作業,並且不需要任何撤消支持,然後立即保存。它不應該是一個問題。如果是這樣,那麼你正在錯誤地使用CoreData,並且可能想看看使用直接的sqlite還是和RDBMS。 – 2009-08-12 00:18:15

回答

4

您必須獲取託管對象,然後將-deleteObject:發送到您要刪除的每個對象的上下文。

必須將對象提取到內存中,以便Core Data可以遵守關係中指定的級聯或無效規則。

如果您在刪除時遇到了特定的性能問題(超出了所需的提取次數),那麼在儀器中對操作進行概要分析將會很有幫助。如果在應用級聯/無效規則時單獨觸發故障,則預取相關對象將提高性能。

0

您可以向NSManagedObjectContext添加一個類別方法 - (executeDeleteWithRequest:error :)。

當然,你仍然需要做循環,但至少它會將問題抽象出來並幹掉你的代碼。

相關問題