7

私が書いている iCloud プラグインでは、iCloud マネージャー クラスをこれらの iCloud NSMetaDataQuery オブザーバーにサブスクライブします。

// Add a predicate for finding the documents
NSString* filePattern = [NSString stringWithFormat:@"*.%@", @"*"];

self.metadataQuery = [[NSMetadataQuery alloc] init];

// Before starting to query, it is required to set the search scope.
arrayWithObject:NSMetadataQueryUbiquitousDocumentsScope]];

// It is also required to set a search predicate.
[self.metadataQuery setPredicate:[NSPredicate predicateWithFormat:@"%K LIKE %@", NSMetadataItemFSNameKey, filePattern]];

// Listen for the second phase live-updating
[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(queryDidReceiveNotification:) name:NSMetadataQueryDidUpdateNotification object:nil];

// Listen for the first phase gathering
[[NSNotificationCenter defaultCenter] addObserver:self
                                      selector:@selector(queryIsDoneGathering:) name:NSMetadataQueryDidFinishGatheringNotification
                                           object:nil];

[self.metadataQuery startQuery];

問題は、これらのセレクターが実際には一度もコールバックされないことです。特に、クラウド内のファイルのアップロード/ダウンロードの進行状況を追跡するには、 NSMetaDataQueryDidUpdateNotificationが必要です。

奇妙なことに、先日これが機能していたのですが、どういうわけか機能しなくなり、問題が実際に何であるかを理解しようとして盲目になりました. NSMetadataQueryDidStartGatheringNotificationをサブスクライブすることで、開始することはわかりますが、終了しないようです。それはかなり奇妙です。

上記のコードの何が問題なのか、誰かが何か手がかりを持っているかどうか疑問に思っていましたか? または、どこで問題を探すことができますか。

お時間をいただきありがとうございます:)

4

2 に答える 2

17

NSMetadataQuery必ずメインスレッドで開始してください。当時、この要件は文書化されていませんでした。

于 2013-01-29T11:36:22.133 に答える