如何在 sqlite 或 CoreData 中保存位置坐标,并在 swift 中进行重要的位置监控

Posted

技术标签:

【中文标题】如何在 sqlite 或 CoreData 中保存位置坐标,并在 swift 中进行重要的位置监控【英文标题】:How to Save location Coordinates in sqlite or CoreData with significant location monitoring in swift 【发布时间】:2016-12-09 09:45:24 【问题描述】:

我想将坐标保存在位置管理器 didUpdateLocation 委托函数中。应用程序可能处于挂起或后台状态,因此不能依赖数组。我希望使用 FMDB 或 CoreData 保存它,但我需要知道我是否可以正常保存记录的位置,或者我是否需要使用后台过期处理程序。如果是后者,请快速分享一个可靠的方法。

我正在使用运行良好的重要位置监控。

【问题讨论】:

什么是“后台过期处理程序”? 我的意思是“beginBackgroundTaskWithExpirationHandler”。在应用程序的剩余后台时间达到 0 之前不久调用此处理程序。它应该用于清理并确保我们有足够的时间来完成一些漫长的过程,例如将重要文件传输到远程服务器或至少尝试进行传输并记下任何错误。 我想知道如果没有它,在 FMDB 中保存数据是否可以正常运行,并且如果它从挂起状态唤醒,应用程序是否有足够的时间将数据保存到 sqlite。谢谢 【参考方案1】:

还有很多时间。至少我在我的应用程序中做到了,无需使用beginBackgroundTaskWithExpirationHandler

尽管如此,请考虑在后台使用allowDeferredLocationUpdatesUntilTraveled 来降低能耗。

【讨论】:

【参考方案2】:

我发现拆分函数更容易、更安全。当我接到对 locationManager didUpdateLocations 委托的调用时,我迅速将位置点附加到待处理位置数组并退出。然后我使用计时器驱动的 processPendingPoints 函数定期将待处理位置数组中的新点添加到我的地图并清除数组,其中计时器和处理函数只会在应用程序处于前台时运行(这对我来说很好目的)。

一般来说,我对待处理位置处理器使用 10 秒延迟,但在电池电量不足时减慢此进程和其他进程。由于我不需要快速使用这种方法,因此我可以重新定位地图或调整地图大小并执行其他实用程序以及添加点。

【讨论】:

以上是关于如何在 sqlite 或 CoreData 中保存位置坐标,并在 swift 中进行重要的位置监控的主要内容,如果未能解决你的问题,请参考以下文章

CoreData 何时真正写入 sqlite 文件?

Coredata或Sqlite哪个更好[关闭]

无法查看使用 coredata 生成的 sqlite 文件中的记录

如何使用 SQLite 文件预加载 Core Data,该文件引用使用“外部存储”保存的图像?

彻底掌握Xcode CoreData调试技巧看这一篇就够了

彻底掌握Xcode CoreData调试技巧看这一篇就够了