0

最初の iOS アプリの更新と、最初の Core Data の移行を行っています。

オンラインで見た標準およびライトウェイト コア データの移行の例よりも複雑に思えますが、何かが欠けている可能性があります。

私たちのシナリオは、.xcdatamodel を更新し (単純に新しいフィールドを追加しただけ)、アプリで使用される多くの参照データ (コア データ データベースに保存) も更新しましたが、一部のユーザー データを保持する必要があります (保存された同じ Core Data データベース内)。

モデル定義の複数のバージョンを .xcdatamodelld ファイルに追加し、モデルを正常に更新する (マッピング モデル (.xcmappingmodel ファイル) を使用して) ライトウェイト コア データ移行プロセスをいじりましたが、できません。選択したデータ (ユーザーのデータ) を以前のバージョンのデータベースからアプリの次のバージョンにバンドルされている新しいデータベース (更新された参照データを含む) にインポートできる明らかな方法はありません。

このシナリオにアプローチする方法についてアドバイスをいただければ幸いです。

前もって感謝します、テッド

4

2 に答える 2

1

ユーザーのデータベースは「インプレース」でアップグレードされます。移行やインポート/エクスポートは必要ありません。ユーザーがアプリの新しいバージョンを実行すると、既存のデータベースが新しいフィールドでアップグレードされます。これがあなたの質問に答えるかどうかはわかりませんが、「インポート」は行われません。

于 2012-05-21T15:14:14.387 に答える
0

最終的に、ユーザーのデータをplistファイルに入れ(これはかなり限られた量です)、システム内の参照データにのみ使用するためにCore Dataデータベースを保持することで、この状況を回避しました。これにより、上書きできます。将来的には心配することなく。

軽量移行では、最初の実行時にデータモデルが更新され、1回限りの移行呼び出しで、ユーザーデータplistファイルが作成されてデータが入力され、v1コアデータ永続ストア* _migrated.sqliteの名前が変更され、v2sqliteデータベースがバンドルからドキュメントにコピーされます。 dir、次にMOMをリセットし、MOM、MOC、およびPersistent Storeをnilに設定します。これにより、Core Dataが次に起動するときに、v2sqliteデータベースが永続ストアとして使用されます。

ふぅ。これが読んでいる人にとって意味があることを願っています。他の詳細についてはお気軽にお問い合わせください。しかし、正直なところ、すべての音よりもはるかに単純でした。

于 2012-05-25T16:35:14.500 に答える