2

Core Data (バックエンドの SQLite) を使用する iOS アプリがあります。'Item' という 1 つのエンティティしかありません。アプリには SQLite ファイルがバンドルされており、何百もの項目が事前に追加されているため、ユーザーが App Store からアプリをダウンロードすると、既にデータが含まれています。

唯一のエンティティにはBOOL favorite、ユーザーが変更できる属性があり、もちろん、アイテムがユーザーのお気に入りのアイテムに含まれているかどうかを確認するために使用されます。

アプリ バンドル (新しい SQLite ファイル) に事前構築されたより多くのアイテムを含むアプリの更新を公開する予定ですが、ユーザーのお気に入りを維持したいと考えています。同様に、このバージョンでは、コア データ モデルにいくつかの変更が加えられます (「アイテム」エンティティにいくつかの新しいプロパティが必要です)。アイテムの新しいセットは、古いアイテムのスーパーセットです (アプリの古いバージョンのアイテムは常に新しいバージョンになります)。

私はこれに多くの苦労をしてきましたが、これに対する解決策を見つけることができません。ユーザーのお気に入りを維持しながら、新しいプロパティをエンティティに導入するデータ モデルをアップグレードできます (いわゆる軽量移行を実行しますが、古いアイテムと新しいアイテムをマージすることはできません。一方、私は'新しい事前追加アイテムを取得できますが、お気に入り関連のデータは破棄されます。

ヒントはありますか?よろしくお願いします

4

2 に答える 2

2

私はついに問題を解決することができました。

アプリ デリゲートには 2 つの NSPersistentStoreCoordinators、2 つの NSManagedObjectContext、および 2 つの NSManagedObjectModel があります。1 つはアプリケーションで使用するセット (更新されたもの) で、もう 1 つは古いストアを指すセットです。私のアプリ デリゲートdidFinishLaunchingWithOptions:メソッドでは、すべてのユーザーのお気に入りを古いストアから読み込み、それらを新しいストアに保存します。アプリで旧店舗に触れるのはそこだけです。

とにかくありがとうございました!

于 2013-01-29T19:07:04.960 に答える
0

そこに新しいものを入れた2番目のデータベースを作成することをお勧めしますが、お気に入りはありません。次に、古いデータベースからお気に入りを取り出して、新しいデータベースに挿入します。古いデータベースを削除し、新しいデータベースに置き換えます。それが最も簡単な解決策のようです。このような状況に対応するための機能が Core Data に組み込まれている場合がありますが、おそらくこちらの方が簡単です。

于 2013-01-29T17:03:24.237 に答える