当应用程序后台运行时,Core Data 无法通过区域监控保存上下文

Posted

技术标签:

【中文标题】当应用程序后台运行时,Core Data 无法通过区域监控保存上下文【英文标题】:Core Data misses to save context with region monitoring when app is backgrounded 【发布时间】:2015-02-25 11:31:47 【问题描述】:

我在监控某些 CLCircularRegion 对象的应用程序中有一个相当奇怪的行为。

应用应该做什么

无论何时输入或离开区域,都会更新或创建一个非常简单的 UIManagedDocument(不在 iCloud 中)中的条目。此外,将触发 NSLocalNotification 告诉我哪个区域受到影响以及用户在该区域内停留了多长时间。

真正发生的事情

通知按预期触发,因此委托方法被触发。甚至持续时间也计算正确。但是,每当应用程序在后台运行较长时间(即大约一个小时或更长时间)时,UIManagedDocument 中都没有更新或创建对象。 这种行为很难调试,因为我无法通过附加的调试器或在模拟器中重现它,仅在运行 ios 8.1.3 的 iPhone 5S 上。

我已经尝试过的东西

即使 UIManagedDocument 自己处理上下文保存,我也尝试直接从位置管理器委托方法调用上下文保存。没有任何成功。 打开位置更新后台功能会导致应用被应用商店拒绝,因为在使用区域监控时不需要进行后台位置更新。

问题

有没有人面临类似的问题或知道如何解决这个问题?

提前谢谢你, 彼得

【问题讨论】:

【参考方案1】:

您是否知道 iOS 应用程序在进入后台区域后仅几秒钟就会被唤醒?之后它会停止执行并暂停。

也许您应该尝试将 UIManagedDocument 操作放在 backgroundTask 中。请阅读Executing Finite-Length Tasks in:

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

【讨论】:

以上是关于当应用程序后台运行时,Core Data 无法通过区域监控保存上下文的主要内容,如果未能解决你的问题,请参考以下文章

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

在 SwiftUI 视图中发布后台上下文 Core Data 更改而不阻塞 UI

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

使用 Core Data 从后台线程获取

当应用程序从 4.0 中的任务列表中删除时,Core Data 存储消失

Core Data 私有队列死锁