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

0

我把它包装在 a 中NSFileCoordinator,它似乎已经解决了这个问题。

NSFileCoordinator *coordinator = [[NSFileCoordinator alloc] initWithFilePresenter: nil];
__block NSError * saveError = nil;

[coordinator coordinateWritingItemAtURL: targetURL
                                options: 0
                                  error: error
                             byAccessor: ^(NSURL *url) {
                                 [dataToSave writeToURL: url
                                                options: NSDataWritingAtomic
                                                  error: &saveError];
                             }];

现在,如果我NSMetadataQuery直接运行,则找到该文件。

于 2017-11-06T13:01:05.013 回答