0

現在、次のようなコードを使用して iCloud コンテナーにアップロードしています。

NSData * data = ...;

NSURL * documentsURL =
    [[[NSFileManager defaultManager] URLForUbiquityContainerIdentifier: @"com.somecontainer.id"] URLByAppendingPathComponent: @"Documents"];

NSURL * cloudFileURL =
    [NSURL fileURLWithPath: [documentsURL.path stringByAppendingPathComponent: @"test.sql"]];

if(nil != documentsURL &&
   ![[NSFileManager defaultManager] fileExistsAtPath: documentsURL.path])
{
    [[NSFileManager defaultManager] createDirectoryAtURL: documentsURL
                             withIntermediateDirectories: YES
                                              attributes: nil
                                                   error: NULL];
} // End of does not exist

[dataToSave writeToURL: cloudFileURL
               options: NSDataWritingAtomic
                 error: error];

これは正常に機能し、iCloud コンテナーにデータを書き込みますが、次を使用してコンテナーをすばやくクエリしようとすると、次のようになります。

filesMetadataQuery = [NSMetadataQuery new];
filesMetadataQuery.searchScopes = @[NSMetadataQueryUbiquitousDocumentsScope];
filesMetadataQuery.predicate = [NSPredicate predicateWithFormat:@"%K like '*.sql'", NSMetadataItemFSNameKey];

[[NSNotificationCenter defaultCenter] addObserver: self
                                         selector: @selector(queryDidFinishGathering:)
                                             name: NSMetadataQueryDidFinishGatheringNotification
                                           object: nil];

[filesMetadataQuery startQuery];

startQuery数秒遅らせない限り、ファイルは表示されません。writeToURL:(ブロッキング コール) が終了すると、 はすぐNSMetadataQueryにそれを見つけることができるはずですが、そうではないようです。

iCloud コンテナにアップロードして、すべてが完了したことを確認する別の方法はありますか?

4

1 に答える 1