当应用程序后台运行时,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 无法通过区域监控保存上下文的主要内容,如果未能解决你的问题,请参考以下文章
在 SwiftUI 视图中发布后台上下文 Core Data 更改而不阻塞 UI
启动 Core Data 应用程序时在后台配置 NSFetchedResultsController