4

複数のデバイスで同じデータにアクセスできるように、既存のアプリケーションを拡張してiCloudを使用できるように取り組んでいます。

ドキュメントベースのストレージを使用し、ファイルパッケージ(つまり、単一のファイルとして表され、によって処理されるファイルのディレクトリ)を使用することを計画していますNSFileWrapper

私の主な質問は、ファイルパッケージの更新がアトミックであることが保証されているかどうかです。アプリを開いて、1つのドキュメントパッケージ内のいくつかのファイルが変更された場合、iOSはそれらをダウンロードして、すべてのサブファイルが存在し、インプレースである場合にのみアプリに通知しますか?または、ファイルが1つずつ入り、一貫性のないパッケージが残る可能性があるというリスクはありますか?

また、私の既存のアプリはSQLiteを使用しています(コアデータではなく、カスタムラッパーを介して)。アプリの一部では、パフォーマンスのために、インデックス付きの優れたSQLデータベースが明らかに必要になります。したがって、私の計画は、iCloudデータを参照ストアとして使用し、Cachesパフォーマンス上の理由から(またはデバイスに対して厳密にローカルな場所に)SQLiteデータベースをディレクトリに保持し、iCloudの内容に基づいてデータベースを更新することです。ユーザーがアプリで行った変更は、iCloudとローカルデータベースの両方に記録されます。これはクレイジーですか、それとも合理的ですか?

4

1 に答える 1

0

これをテストするためのテストベースを持っていないので、あなたの主な質問に対する私の答えは学術的なものですが…</p>

NSManagedDocument によって操作されるアイテムとしてそのエンティティを使用して調整する場合、ディレクトリは単一エンティティとして扱われます。

NSManagedDocument を使用して iCloud を管理することについて学んだメモに基づいて、この回答を作成しています。

// Conflict
// - what if a device detached from the network changed a document that another device changed?
//   and then the detached device re-attached and tried to apply the change and it conflicted?
//   one must manage the conflict by looking for the InConflict document state.
// - when it happens, a decision must be made which version of the document to use and/or
//   manage changes.  probably want to set NSManagedObjectContext's mergePolicy to other than
//   default (Error).
// - then update the old, conflicting NSFileVersion to no longer conflict (and remove those
//   versions).

(はい、objective-c コメント形式でメモを取ります。)

于 2013-01-10T20:18:45.860 に答える