ios - X 天后删除核心数据

标签 ios core-data swift

所以我在 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/

相关文章:

ios - 应用程序如何在后台检查状态?

ios - 如何在 Firebase (Swift) 中使用安全规则限制子节点

objective-c - 如何将 Objective C View Controller 推送到 Swift View Controller

ios - 是否可以在Flutter中更改CupertinoTabBar的高度?

ios - 核心数据 : How to fault freshly created managed objects

iphone - 是否可以在开发 iPhone 上查看存储在 Core Data 中的数据?

ios - 核心数据错误 - 语句仍处于事件状态 - 在主线程中

ios - 为什么 iOS 崩溃不显示回溯?

iPhone iOS NSDate 如何检测日期范围是否包括月初?

javascript - 为什么数组中的两个对象中只有一个作为 prop 传递?