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メソッドが標準的な方法ですか?
ヒントとヘルプがあれば幸いです:)
お時間をいただきありがとうございます:)