我目前正在使用类似于以下内容的代码上传到我的 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 容器并验证一切是否已完成?