跟踪iCloud文件的上传进度

我正在编写一个使用iCloud的Unity插件。

现在我用来将文件移动到iCloud的方式是使用以下代码:

[byteDocument saveToURL:savePathURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) { if (ubiquitousContainerURL != nil) { NSURL *ubiquityDocumentDirectory = [ubiquitousContainerURL URLByAppendingPathComponent:@"Documents" isDirectory:YES]; ubiquityDocumentDirectory = [ubiquityDocumentDirectory URLByAppendingPathComponent:[NSString stringWithFormat:@"%@%@", filename, extension]]; NSFileManager* fm = [NSFileManager defaultManager]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSError* error = nil; if (![fm fileExistsAtPath:ubiquityDocumentDirectory.path]) { NSLog(@"Attemping to move to cloud"); didMoveToCloud = [fm setUbiquitous:YES itemAtURL:savePathURL destinationURL:ubiquityDocumentDirectory error:nil]; } else { NSLog(@"Attemping to replace in cloud"); didMoveToCloud = [fm replaceItemAtURL:ubiquityDocumentDirectory withItemAtURL:savePathURL backupItemName:nil options:0 resultingItemURL:nil error:&error]; } if (didMoveToCloud) { NSLog(@"Did move text document successfully to cloud"); //UnitySendMessage("GameObject", "DidSaveFile", [savePathURL.path cStringUsingEncoding:NSASCIIStringEncoding]); } else { NSLog(@"Failed to move text document to cloud"); //UnitySendMessage("GameObject", "DidSaveFile", [savePathURL.path cStringUsingEncoding:NSASCIIStringEncoding]); } if (error != nil) { NSLog(@"Error saving text document to cloud: %@", error.description); //UnitySendMessage("GameObject", "DidSaveFile", [savePathURL.path cStringUsingEncoding:NSASCIIStringEncoding]); } }); } }]; 

基本上我只是使用一个名为CloudByteDocument的简单的inheritance类的UIDocument 。 我首先将它保存在设备上,然后将它移动到iCloud。

现在的问题是,使用SetUbiquituos似乎没有提供任何方式来跟踪上传进度? 我已经附加到两个MSMetaDataQuery观察者,即:

  // Listen for the second phase live-updating [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(queryDidReceiveNotification:) name:NSMetadataQueryDidUpdateNotification object:nil]; // Listen for the first phase gathering [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(queryIsDoneGathering:) name:NSMetadataQueryDidFinishGatheringNotification object:nil]; 

而且我也意识到在NSMetadataQueryDidUpdateNotification期间可以获取上载和下载进度等内容 ,但是这种更新方法似乎始终没有提供非常可靠的结果。

我想知道是否有任何方式可以使用一个实际的callback方法来通知你,当一个文件已被上传到iCloud? 或者是NSMetadataQueryDidUpdateNotification方法这样做的标准方式?

任何提示和帮助将appriciated 🙂

感谢您的时间 :)