3

Wi-Fi 経由で iOS デバイス間で Core Data を同期したいと考えています。ASyncSockets と接続する方法は知っていますが、次のステップ (コア データの同期) についてはわかりません。

iOS と Mac の間で同期するための ZSync プロジェクトは知っていますが、iOS デバイス間で同じことを行うことができるかどうかを誰かが知っているかどうか疑問に思っていました。

4

2 に答える 2

0

あなたがウェブを介して行くことができるなら、私は間違いなくiCloudを使います.iCloudはこれを効率的な方法で処理します. アプリが Wi-Fi でのみ動作する必要がある場合は、iCloud の同じ動作を再実装できる可能性があります。その仕組みは ドキュメントUsing Core Data with iCloud Programming Notesで説明されています:

iOS 5 では、Core Data には、SQLite ストアと iCloud との効率的な統合をサポートする機能強化が含まれています。主な新機能は、永続ストアにコミットする各変更が、クラウドに永続ストア ファイルを直接保持するのではなく、iCloud に保存される個別のトランザクション ログ ファイルに記録されることです。これは、iCloud を介した変更の伝播が効率的であることを意味します (代わりに、変更ごとに SQLite ファイル全体をプッシュすることもできます)。

于 2013-02-02T13:30:45.027 に答える
0

これにはいくつかの方法で対処できますが、次の 2 つのうちの 1 つを検討します。

  1. NSManagedObjectサブクラスのプロパティを取得して に変換し、NSDataAsyncSocket を使用して転送します。次に、受信アプリがすべてのプロパティを受信すると、独自のデータベースでオブジェクトを再作成します。

  2. データベース全体を一度に転送します。何も再作成する必要はありません。

最初のオプションには、必要なものだけを送信するという利点があります。何千ものオブジェクトがあり、そのうちの 1 つを変更すると、その 1 つのオブジェクトのみが転送されます。一方、1 つのオブジェクトに複数の関係がある場合は、関連するオブジェクトも送信する必要があるため、事態は非常に複雑になる可能性があります。

2 番目のオプションは最も簡単ですが、あまり効率的ではありません。1 つのオブジェクトを変更すると、データベース全体が送信されます。データベースのサイズが数メガバイトの場合、それには時間がかかる可能性があり、変更を加えるたびにそれを行っています。

理想的には、iCloud と同じ方法でそれを行います。変更されたもののみをプッシュ/プルします。iCloud がそれをどのように決定するのか、私にはわかりませんが、それは些細なことではないに違いありません。どちらの方法が最適かは、データベースの大きさとオブジェクトが変更される頻度によって異なります。方法 2 は、変更がほとんどない大規模で複雑なデータベースに最適です。方法 1 は、データベースが比較的単純 (リレーションシップがないか、ほとんどない) で、多くの変更が行われる場合に最適です。

于 2013-02-02T07:42:46.360 に答える