0

最初に、これはデータ移行に関する重要な質問ではないことを述べさせてください。Core Data モデルの変更は実際には検討していませんが、アプリの更新中に項目を追加します。

プロセスは次のとおりです。

1) アプリケーションは、プリロードされたコア データで作成されます。具体的には、チェックリストです。2) ユーザーは特定の値 (所有、指名手配など) を変更してこのチェックリストを編集できますが、アイテムを削除することはできません 3) 新しいアイテムが追加されたアップデートをリリースします。ユーザーの既存のデータは変更されません (エラータ目的で変更する必要がない限り)。

私は現在、NSUserDefaults を作成して、ユーザーが更新を受信したかどうかを確認し、受信していない場合は新しい項目を追加することでこれを管理しています。たとえば、ユーザーがバージョン 1.4.3 から 1.4.4 に移行する場合、アプリは 1.4.4 で追加されたアイテムを確認して追加します。ただし、アプリが 1.4.0 から 1.4.4 に移行する場合、1.4.1、1.4.2、1.4.3、および 1.4.4 で追加された項目を確認して追加します。さらに、ユーザーがバージョン 1.4.4 で新しいアプリをインストールしている場合、新しいアイテムは既にプリロードの一部であり、以前の更新を適用しないことを認識しています。更新は .plist/xml ファイルとして適用されます

システムは現在正常に動作していますが、アプリケーションに 38 個の plist ファイルがあり、更新が適用されているかどうかを確認する 37 個の if/else ステートメントがあるため、煩雑になりつつあります。

もっと良い方法があるはずです。私の最初の考えは、アプリに 2 つのデータベースを用意することです... 1 つはアプリの更新で更新し、もう 1 つはユーザーが編集できます。次に、アプリが更新されるたびにデータベースが比較され、データベース内の新しいアイテムが編集可能なストアにコピーされます。ただし、これは長いプロセスになるのではないかと心配しています (現在 37,000 を超えるアイテムがあり、更新で 400 ~ 500 を追加する場合は問題ありませんが、37,000 のアイテムをトラバースして新しいアイテムをコピーするには長い時間がかかりますか? ?)

この質問はこのサイトにとって主観的すぎるかもしれません。そうであれば申し訳ありませんが、提案をいただければ幸いです。

ザック

4

1 に答える 1

3

ifこれは、次のような更新プロパティ リストやステートメントを使用せずに、1 つのプリロード データ ストアで実行できます。

  1. アプリの現在のバージョンをユーザーの既定値に保存して、更新中に以前のバージョンとして取得できるようにします (既にこれを行っているように聞こえますが、明確にしたかったのです)。

  2. プリロード ストアで、プリロード項目が追加されたメジャー、マイナー、およびポイント リリースに対応する 3 つの整数フィールドを追加します。たとえば、バージョン 1.4.3 で項目が追加された場合、major= 1、minor= 4、およびpoint= 3 です。

  3. 更新中にユーザーのデータ ストアに新しいアイテムを追加するときは、ユーザーの既定値から以前のアプリ バージョンを取得し、そこからメジャー、マイナー、およびポイントの更新番号を取得します。ユーザーがバージョン 1.4.0 からアップグレードする場合は、previousMajor= 1、previousMinor= 4、previousPoint= 0 を使用します。ユーザーがアプリを初めてインストールする場合、3 つすべてがゼロになるように、これらの値をデフォルトでゼロにします。

  4. 次のような述語を使用して、プリロード ストアから追加する必要があるものをすべてフェッチします。

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"major > %d and minor > %d and point > %d", 
        previousMajor, previousMinor, previousPoint];
    
  5. フェッチで見つかったものはすべて追加する必要があります。追加して完了です。

于 2013-10-01T17:58:20.133 に答える