如何在应用程序处于后台时执行 Core Data 操作

Posted

技术标签:

【中文标题】如何在应用程序处于后台时执行 Core Data 操作【英文标题】:How to perform Core Data operations while the app is in background 【发布时间】:2015-04-21 08:53:38 【问题描述】:

我为“位置更新”后台模式启用了 ios 应用程序。我需要使用Core Data 保存收到的部分CLLocation 对象信息,以便稍后将一些相关信息发送到Web 服务(也可以在应用程序在后台运行时)。我已经使用AppDelegateNSManagedObjectContext 进行了一些插入和保存测试,并且没有单独的线程,它似乎可以工作(至少在模拟器中运行)。但我不知道这是否真的是这样做的合适方法。我一直在寻找有关在应用处于后台状态但没有成功时使用 Core Data 的信息。

我的问题是:这安全吗?我的意思是,我的实现是否会导致与Core Data 和我要保存的信息相关的任何异常或冲突状态或丢失?我应该创建一个单独的线程来处理这个吗?或者管理这种情况的最佳方法应该是什么?

提前致谢

【问题讨论】:

【参考方案1】:

你已经在打好球了。我的建议仍然是:

    使用geofancing。这将通知您的应用程序选择的位置范围更改。 我不知道您为什么要求创建一个单独的线程。只需将任务排入dynamic dispatch 即可。即使你想制作一个单独的线程。美好的。 应用程序在后台时,核心数据肯定会保存。这种类型的应用可以永远留在后台。 每个线程使用一个托管对象上下文。托管对象上下文不是线程安全的。

【讨论】:

【参考方案2】:

当您在后台使用位置时,您可以在后台保存护理数据

首先检查您的应用是否在后台正确运行以获取位置信息。 *注意:不要通过cable连接mac或debug模式测试。

如果一切顺利并且应用程序获取位置,则在以下方法中。 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

在核心数据中添加值

如果您有不同的 viewController 来保存数据,触发位置通知并将观察者添加到核心数据中的添加值

【讨论】:

以上是关于如何在应用程序处于后台时执行 Core Data 操作的主要内容,如果未能解决你的问题,请参考以下文章

如何在iOS 8中应用程序处于后台状态时连续执行任务

Flutter - 如何在应用程序处于后台时在特定时间执行功能?

iOS:在应用程序处于后台时执行上传任务

启动 Core Data 应用程序时在后台配置 NSFetchedResultsController

从 Core Data 中删除和添加存储

Core Data 后台处理,保存不推送到主上下文