1

旅行(パス)を運転しているユーザーを追跡するアプリがあります。CoreDataを使用してすべての情報を保存します。

db構造:

パス->>ポイント

ポイントにはlat値とlong値が含まれます。

私がしていることは、CLLocationManagerが更新されるたびに、そのポイントを配列に追加することです。ユーザーがパスの最後に到達したら、ループしてそれらすべての場所をデータベースに追加します。

私の質問は...これはこれを行うための最良の方法ですか?私の2つのオプションは次のとおりです。

  1. すべての場所をアレイに追加してから、すべての場所をコアデータに追加します。

  2. CLLocationManagerが更新されるたびに、それをコアデータに直接追加します。

コアデータにアクセス/変更するためのベストプラクティスがあるかどうかはわかりません。まとめて(forループで)実行する必要があります。

if ([managedObjectContext save:&error]) {
   // handle save error
}

forループの最後で、すべてを凝縮したままにします。

または、CLLocationManagerが更新される[managedObjectContext save:&error]たびに、更新のたびに新しいポイントを追加する必要があります。

Option1に関する唯一の懸念は、パスの記録中にアプリがクラッシュした場合、情報が保存されないことです。

したがって、Option2を使用する利点は、更新のたびにデータが保存されることですが、コアデータにこれほど頻繁にアクセスすることが悪い習慣であるかどうかはわかりません。

お時間を割いていただき、誠にありがとうございます。

4

1 に答える 1

2

想定されるNSLocationManager更新頻度 (最大で数秒ごと) では、頻繁に保存してもまったく問題ありません。また、配列は実際には必要のないメモリをますます消費します。

10 ポイントごとに 1 つ保存するなど、控えめな量でそれを行うこともできます。

applicationWillResignActiveまた、アプリが中断された場合に備えて保存する必要があります。

于 2012-08-01T08:35:01.377 に答える