3

iCloud コンテナ内のファイルの変更を監視するために、登録しました

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(processiCloudUpdates:)
                                             name:NSMetadataQueryDidUpdateNotification
                                           object:nil];

理想的には、更新が行われたというメッセージを受け取るたびに、各 UIDoc を開いて、設定が変更されているかどうかを確認したいと思います。NSMetadataQueryDidUpdateNotification一度だけ呼び出された場合、これは問題ありません。ただし、それは数回発生しています (私は etc. を忘れず、removeObserverいくつかのインスタンスを実行しています)。したがって、更新通知が発生するたびにすべてのファイルをロードすることは非常に非現実的です (5 つのファイルがあり、これが 4 回呼び出されている場合、20 個の UIDoc を立て続けに開きます)。たとえば、これは、1 つのファイルを更新した場合に発生します (そして、ユビキタス コンテナーに 1 つのファイルしかありません)。

2012-07-05 10:51:39.565 Meernotes[7842:707] ... NSMetadataQuery update
2012-07-05 10:51:42.468 Meernotes[7842:707] ... NSMetadataQuery update
2012-07-05 10:51:45.216 Meernotes[7842:707] ... NSMetadataQuery update
2012-07-05 10:51:47.036 Meernotes[7842:707] ... NSMetadataQuery update

ファイルがいつ変更されたかを判断する他の方法はありますか? NSFileVersion もあまり役に立ちませんでした。

4

1 に答える 1

4

NSMetadataQueryDidUpdateNotification結果のいずれかの属性の一部が更新NSMetadataItemされるたびに問題が発生します。NSMetadataQuery部分的なアップロードまたはダウンロードの進行状況が含まれます。UIDocumentしたがって、この通知処理中にインスタンスを開こうとするのは間違っています。

代わりに、ドキュメントの属性値を観察することでドキュメントがダウンロードされた瞬間を特定し、ドキュメントNSMetadataItemを開くためにキューに入れることができます。

取り扱いもお忘れなくNSMetadataQueryDidFinishGatheringNotification。受信者が最初の結果を終了したときにポストされます - クエリのフェーズを収集します

于 2012-07-21T13:10:13.037 に答える