2

私は周りを見回しましたが、以下に対する完全な答えを見つけることができませんでした。

UserData を処理し、初期バンドルを介して SeedData を提供する iOS アプリケーションを構築することを計画しています。2 つの異なる永続ストアにある 2 つのデータベースを共同で使用する方法については、既に有益な投稿がありました。私の場合、問題の一部にしか対応しません。

データセットは特にマルチメディア素材でかなり大きいため、ストレージスペースの管理を可能にするために、SeedData のさまざまなセットを提供できるようにしたいと考えています。

基本的に、SeedData は基準に従って分割され、ダウンロードできるようになります。ユーザーは、必要なものと使用したいストレージの量に応じて、基準 1、基準 2、基準 3 のファイルをダウンロードできます。データは .sqlite ファイルとして提供され、もちろんそれぞれが同じデータ モデルを共有します。

ここで、いくつかの小さなデータの重複が発生します (私の場合は回避できません)。そのため、単一の要素が基準 1 のセットと基準 3 のセットの両方に含まれる可能性があります。ただし、最終的には、アプリは 1 つの要素のみを表示します。

私は2つのアプローチを検討しましたが、どちらの道を取るべきかわかりません。意見やアドバイスは本当に素晴らしいでしょう:

  1. 静的マージ: 1 つの新しいデータセットがダウンロードされる場合、データはソースからアプリ データベースにコピーされ、ダウンロードされたデータは破棄されます。私はこの方法が好きではありません。a) ロード中にデータセットの 2 倍のストレージ容量が必要になるからです b) 非常に時間がかかる可能性が高いからです c) データセットは時間の経過とともに更新されることが予想されるため、更新の実装が難しい可能性が高いからです大きなファイルをダウンロードし、データセット自体の 2 倍のサイズを使用する必要があります。

  2. 動的マージ: 複数のファイルをサンドボックス キャッシュ ディレクトリ ( .../Cache/criteria1/ 、 .../Cache/criteria2/など) に保持することで、フォルダーの追加および削除時にフォルダーのコンテンツを簡単にダウンロードできます。破棄する場合、複数の .sqlite ファイル間の動的マージ (重複を破棄して重複を解決する動的マージ) となる仮想 SeedData を作成するだけで済みます。また、新しいコンテンツをダウンロードしてフォルダのコンテンツを置き換えるだけなので、更新は非常に簡単に処理できます。次に、以前に共有したリンクで説明したように、UserData データベース (r/w で使用) と複数のデータファイルで構成される SeedData (厳密に r のみで使用) を作成します。

これまでに多くの検索を行ってきましたが、これを達成するための満足のいく方法はありませんでした (または理解できませんでした)。私はiOS 7を厳密にターゲットにしています。

できれば助けてくれてありがとう:)クリス

4

1 に答える 1

0

思ったよりずっと簡単でした。私は実際にいくつかのテストを行い、

[persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                              configuration:nil
                                        URL:storeURL
                                    options:nil
                                      error:&error];
]

storeURL を使用すると、単一の NSFetchRequest を使用して一度にすべてのテーブルにアクセスできます。

もちろん、重複が発生した場合は、重複を排除するようにフェッチ要求を分割する必要があります (必要な場合)。

于 2013-10-27T09:53:49.763 に答える