現在、次のようなコードを使用して 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 コンテナにアップロードして、すべてが完了したことを確認する別の方法はありますか?