我正在编写一个使用 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]);
}
});
}
}];
基本上我只是使用一个简单的UIDocument继承类,称为CloudByteDocument。我首先将其保存在本地设备上,然后将其移至 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方法是这样做的标准方法吗?
任何提示和帮助都会得到帮助:)
感谢您的时间 :)