2

私は Stack Overflow を初めて使用し、プログラミングを始めて 1 年しか経っていないため、このようなことはまだ初心者です (つまり、ご容赦ください!)。sqlite データベースを使用してユーザー生成データを保存する、xcode 3 で作成された古いアプリをアップグレードしています。アップグレードしたアプリは iCloud で動作する必要があるため、Core Data に切り替えることにしました (sqlite だけでは iCloud と同期できないため)。Core Data 構造の実装に問題はありませんが、ユーザーが既存のデータを保持できるようにする方法が問題です。

私はすでにこれらの行に沿ったトピックを見てきました:既存の sqlite ファイルを Core Data にインポートする方法は? およびNeed To Populate Core Data From SQLite Databaseであり、ユーティリティ アプリを作成して既存のデータをインポートすることはできますが、最初のアプリ バンドルには既存のデータがなく、データはユーザーによって保存されるため、これは役に立ちません。

私はこれについて得ることができるどんな助けにも本当に感謝しています. たぶん、コアデータを完全に避けて、SQLite データを iCloud に保存する別の解決策を見つけたほうがよいでしょうか?

前もって感謝します!

4

1 に答える 1

2

コアデータを使用できます。コア データ モデルとスタックを作成します。移行プロセスは、sqlite データベースからデータのチャックをクエリしてコア データ データベースに挿入することで構成されます。

sqlite に 3 つのテーブルがあるとします。人、車両、および財産。コア データ モードで同等のエンティティを作成し、これらのテーブルから情報をクエリしてコア データに挿入する必要があります。コア データ データベースにデータを挿入する方法と、マルチスレッド環境でデータを使用する方法 (移行プロセス中にアプリケーションがロックされないようにするため) に慣れる必要があります。

次の点に注意してください。

  • チャンクで保存してみてください。すべてをメモリにロードしないでください。また、NSManagedObjectContext インスタンスに多数の保存呼び出しを行わないようにする必要があります。コンテキストへのすべての保存呼び出しは IO です。データの使用量に応じて、IO とメモリのバランスを取ります。
  • インデックスを作成できる既存のエンティティにあるプロパティにインデックスを付けます。これは、関係を構築するのに役立ちます (もしあれば)
  • 移行を開始する前に、システムに時間を尋ねます。UIApplication の beginBackgroundTaskWithExpirationHandler: を使用して、移行を続行するための十分な時間をシステムから確保します (ユーザーがアプリケーションをバックグラウンドに送信した場合)。
  • sqlite データベースのクリーニングを気にしないでください。作業が完了したら、データベース ファイルを削除します。

これらは、今のところ私がアドバイスできることの一部です。もっと思いついたら、この投稿を編集します。幸運を祈ります。

于 2012-09-22T06:14:46.253 に答える