跟踪iCloud文件的上传进度

时间:2012-11-21 17:20:51

标签: objective-c ios cocoa 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 的简单继承的 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 期间获得上传和下载进度等内容,但是这种更新方法似乎并不能始终提供非常可靠的结果。

我想知道在将文件上传到iCloud时是否有任何方法可以使用实际的回调方法通知您?或 NSMetadataQueryDidUpdateNotification 方法是标准方法吗?

任何提示和帮助都会受到关注:)

感谢您的时间:)

0 个答案:

没有答案