3

私のアプリは、iCloud にバックアップされるディレクトリ内にデータベースをインストールするため、最近拒否されました。データベースには事前に入力された多くのデータが付属しており、アプリはユーザーが生成したデータを同じファイルに保存します。したがって、ユーザーが生成したコンテンツと事前入力されたデータを混同することは、Apple が私たちに望んでいたことではありません。ここまでは順調ですね。

データベースを 2 つに分割し、ストア ファイルに NSURLIsExcludedFromBackupKey = YES を使用して事前に入力されたデータをマークします。

しかし、ユーザーが障害を見つけてそれを変更したいために、そのストア内のデータを変更したい場合はどうなるでしょうか。または、私自身がそのストアで値を変更するオンライン更新を利用できるようにします。どうすればそれに対処できますか。

ストア ファイルを削除するか、新しいファイルを作成するか (現在は NSURLIsExcludedFromBackupKey = NO で)、データベースを最初から /tmp または /Library/caches に保存して /Application Support (自動的にバックアップされます) に移動する必要がありますか?しかし、私のデータベースが何らかの理由でシステムによって削除されているという脅威がある場合、/Library/caches はどうなるでしょうか?

4

2 に答える 2

2

アプリが事前入力されたデータを実際に変更できる種類のアプリである場合、Apple が事前入力されたデータのバックアップを許可しないのは少し面倒です。ただし、事前入力されたデータベースが大きい場合、AppStore に既に存在する情報でアプリがユーザーの iCloud スペースを浪費することを望んでいないことは理解できます。

Woody はこのアプローチについて良い考えを持っていますが、アプリの起動時に事前に入力されたデータをユーザーがバックアップした DB にコピーすると、実際には同じくらい多くのスペースが浪費されているという事実から Apple が目を背けるかどうかはわかりません。

このようなものはどうですか:

  • A:バックアップされていない、データが事前に取り込まれた DB
  • B:ユーザーが追加したデータをバックアップしたDB
  • ユーザーが A のオブジェクトに変更を加えた場合、A の行を「オーバーライド」する新しい行を B に作成するB の新しい行によって。

アプリを更新する必要があるときはいつでも、DB A を新しいコンテンツに置き換えるだけです。これにより、ユーザーが変更したデータと競合する可能性があります。ユーザー データが更新されたデータよりも重要かどうか、およびこれらの競合を処理する方法を決定する必要があります (たとえば、両方を維持するなど)。

更新で DB B の構造を変更する必要がある場合 (たとえば、列を追加する必要がある場合)、アプリに更新ルーチンを含めて、ユーザーが古い DB バージョンを使用していることを検出し、コードを書き込む必要があります。更新後の最初の起動時に、ユーザー データを新しいデータベースに移行します。

于 2012-06-27T08:33:53.757 に答える
0

起動時に、ユーザーデータベースにデータが入力されていない場合、事前に入力されたデータタブからデータをコピーし、デフォルトをリセットするオプションをユーザーに与えることができますが、これは再び同じことを行いますか?

于 2012-06-27T08:26:21.747 に答える