2

UIManagedDocument とユビキタス オプション (NSPersistentStoreUbiquitousContentNameKey と NSPersistentStoreUbiquitousContentURLKey) を使用して Core Data と iCloud をテストしています。すべて正常に動作しています。デバイスは問題なく適切な時間内に同期されます。DB が小さい (100K 未満)。

私が言ったように、私はアプリをテストしていて、データベースに多くの変更を加えています。その結果、多くのトランザクション ログが生成されます。私が抱えている問題は、テストに使用したデバイスの 1 つでアプリを削除して再インストールすると (iCloud データを削除せずに)、アプリがドキュメントを開くのに非常に長い時間がかかることです。openWithCompletionHandler には数分かかり、終了しない場合もあります。デバッグをオンにすると (-com.apple.coredata.ubiquity.logLevel 3)、長い待機時間があり、その後 DB がトランザクション ログで再構築されることがわかります。iCloudデータを削除して最初のデバイスにデータを再挿入すると、2番目のデバイスは問題なく同期します。そのため、遅延の理由はトランザクション ログの数が多いことだと思います (developer.icloud.com で確認できるように、テスト中に 20 ~ 30 個)。コア データの管理 iCloud トランザクション ログはコア データを自動的に処理しますが、削除が見られません。おそらく、それにはもう少し時間が必要です。

私の質問は次のとおりです。トランザクション ログは統合されますか? ログの統合を強制できますか? 別の推奨オプションは?

同期に必要な重要な情報のサブセットのみを iCloud Core Data ファイルに保存します。完全な DB を含む別のローカル ファイルがあるので、情報を大幅に失うことなく iCloud DB を再構築できます。おそらく、大量のログを検出して iCloud DB を削除し、再作成することができます。これは良い選択肢だと思いますか?

助けてくれてありがとう。

4

1 に答える 1

2

トランザクション ログは統合されますか?

それが機能するはずの方法です。

ログの統合を強制できますか?

いいえ。トランザクション ログの存在に直接影響する API はありません。iCloud システムはいずれそれらを統合する予定ですが、それがいつになるかについての文書はなく、強制することもできません。

別の推奨オプションは?

間接的にトランザクション ログの数を制限できます。つまり、変更を保存する頻度を減らします。トランザクション ログは、Core Data での変更の保存に対応します。正直なところ、20 ~ 30 のトランザクション ログはそれほど多くないため、大きな違いはないかもしれません。ログ ファイルの数を減らすことはできるかもしれませんが、ログ ファイルのデータ量は同じままです。

トランザクション ログは実際には問題ではありません。お察しのとおり、iCloud がトランザクション ログの処理を開始するまでには長い時間がかかります。その遅延の間、iCloud は Apple のサーバーと通信し、トランザクション ログをダウンロードしています。これの一部はネットワークの速度と遅延の影響を受けますが、残りは iCloud と同じです。

于 2013-02-24T22:25:14.947 に答える