我有一个应用程序可以跟踪用户驾驶旅行(路径)。我使用Core Data保存所有信息。
db结构:
路径 - >>点
Point包含lat和long值。
我所做的是,每次更新CLLocationManager时,我都会将该点添加到数组中。一旦用户到达路径的末尾,我循环并将所有这些位置添加到数据库。
我的问题是......这是最好的解决方法吗?我的两个选择是:
将所有位置添加到阵列,然后将所有位置添加到核心数据。
每次更新CLLocationManager时,将其直接添加到核心数据。
我不确定是否有一些最佳实践来访问/更改核心数据。我应该批量(循环),所以我可以调用
if ([managedObjectContext save:&error]) {
// handle save error
}
在for循环结束时并将其全部压缩。
或者我应该在每次更新后每次CLLocationManager更新调用[managedObjectContext save:&error]
时添加一个新Point。
我对Option1的唯一顾虑是,如果应用程序在录制路径时崩溃,则不会保存任何信息。
因此使用Option2的一个好处是每次更新后都会保存数据,但我不确定是否经常访问核心数据是不好的做法。
非常感谢您抽出宝贵时间提供帮助。
答案 0 :(得分:2)
假设频率为NSLocationManager
更新(每隔几秒最多),经常保存是绝对可以的。此外,你的阵列将占用越来越多的内存,这是不必要的。
你仍然可以谨慎数量,比如每10分钟一次。
此外,您应该保存在applicationWillResignActive
以防应用程序被中断。