所以我在 Core Data 中有一堆对象,并希望它们在 X 天后自动删除(这将基于 NSDate)。我做了一些搜索,似乎您一次只能删除一个核心数据对象,而不是一组,更不用说基于特定日期的那些了。我在想也许有一个循环遍历每个对象——但这似乎会占用大量处理器资源。关于我应该在哪里寻找这样做的任何想法?谢谢。
最佳答案
一个一个地循环删除对象是正确的做法。
删除 Core Data 中的对象会占用大量处理器资源。如果这是个问题,那么 Core Data 不适合你的项目,你应该使用其他东西。我推荐FCModel ,作为一种非常高效的轻量级替代品。
如果您要坚持使用 Core Data,最好在后台 NSOperationQueue 上执行大型操作,这样主应用程序在删除对象时不会被锁定。你需要非常小心跨多个线程的核心数据,方法是为每个线程有一个单独的托管对象上下文,都使用相同的持久存储协调器。永远不要跨线程共享托管对象,但您可以共享 objectID,以在其他托管对象上下文中获取相同数据库记录的第二个副本。
基本上你的后台线程创建一个新的上下文,删除循环中的所有对象,然后(最好在主线程上,参见文档)保存后台线程上下文。这将合并您的更改,除非存在冲突(两个上下文都修改同一个对象)——在那种情况下,您有几个选择,我只是中止整个删除操作并重新开始。
Apple 在此处提供了所有问题和示例代码的良好文档:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdConcurrency.html
这有点让人望而生畏,您需要做一些认真的功课,但是一旦您了解了一切的工作原理,实际的代码就会非常简单。或者只使用专为快速批处理操作而设计的 FCModel。
关于ios - X 天后删除核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27828536/