6

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 秒後にタイムアウトする以外に、ファイルが存在するかどうかをテストする方法はありますか?

4

1 に答える 1