iCloud にファイルを保存する iOS アプリがあります。アプリを起動すると、以前のデバイスが既にファイルをアップロードしているかどうかを確認したいと考えています。最初のデバイスを起動すると、iCloud にファイルが追加されます (Mac の Mobile Documents フォルダにファイルが表示されます)。次に、2 番目のデバイスでアプリを起動し、次の NSMetadataQuery を使用してファイルがアップロードされているかどうかを確認しようとしましたが、0 の結果が返されました。そのクエリを実行し続けると、約 8 ~ 10 秒後に結果が返されます。
iCloudQuery = [[NSMetadataQuery alloc] init];
iCloudQuery.searchScopes = @[NSMetadataQueryUbiquitousDataScope];
NSString *filePattern = [NSString stringWithFormat:@"*.%@", @"txt"];
iCloudQuery.predicate = [NSPredicate predicateWithFormat:@"%K LIKE %@", NSMetadataItemFSNameKey, filePattern];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(iCloudQueryDidFinishGathering:) name:NSMetadataQueryDidFinishGatheringNotification object:iCloudQuery];
[iCloudQuery startQuery];
通知を受け取ると、クエリの resultCount は 0 です
- (void)iCloudQueryDidFinishGathering:(NSNotification *)notification
{
NSMetadataQuery *query = [notification object];
[query disableUpdates];
[query stopQuery];
NSLog(@"Found %d results from metadata query", query.resultCount);
}
ファイルがダウンロードされていなくても、iCloud にファイルが存在する場合、NSMetadataQuery は resultCount を返すべきではありませんか? オーバーを試行して 15 ~ 30 秒後にタイムアウトする以外に、ファイルが存在するかどうかをテストする方法はありますか?