如何在应用程序处于后台时执行 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 服务(也可以在应用程序在后台运行时)。我已经使用AppDelegate
的NSManagedObjectContext
进行了一些插入和保存测试,并且没有单独的线程,它似乎可以工作(至少在模拟器中运行)。但我不知道这是否真的是这样做的合适方法。我一直在寻找有关在应用处于后台状态但没有成功时使用 Core Data
的信息。
我的问题是:这安全吗?我的意思是,我的实现是否会导致与Core Data
和我要保存的信息相关的任何异常或冲突状态或丢失?我应该创建一个单独的线程来处理这个吗?或者管理这种情况的最佳方法应该是什么?
提前致谢
【问题讨论】:
【参考方案1】:你已经在打好球了。我的建议仍然是:
-
使用
geofancing
。这将通知您的应用程序选择的位置范围更改。
我不知道您为什么要求创建一个单独的线程。只需将任务排入dynamic dispatch
即可。即使你想制作一个单独的线程。美好的。
应用程序在后台时,核心数据肯定会保存。这种类型的应用可以永远留在后台。
每个线程使用一个托管对象上下文。托管对象上下文不是线程安全的。
【讨论】:
【参考方案2】:当您在后台使用位置时,您可以在后台保存护理数据
首先检查您的应用是否在后台正确运行以获取位置信息。 *注意:不要通过cable连接mac或debug模式测试。
如果一切顺利并且应用程序获取位置,则在以下方法中。 - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
在核心数据中添加值
如果您有不同的 viewController 来保存数据,触发位置通知并将观察者添加到核心数据中的添加值
【讨论】:
以上是关于如何在应用程序处于后台时执行 Core Data 操作的主要内容,如果未能解决你的问题,请参考以下文章
Flutter - 如何在应用程序处于后台时在特定时间执行功能?