我正在寫一個應用程序,使用iCloud文檔在不同設備之間同步數據。 我遇到的問題是,將文件從一臺設備保存到iCloud後(兩臺設備都是模擬器,註冊到同一個iCloud賬戶),該文件似乎不存在於其他設備(或需要更多超過30-40分鐘才能「到達」,而兩個模擬器都在)。強制iOS上傳文件到iCloud
我想也許有一個API來強制文件同步,但似乎沒有這樣的API(在NSFileManager
)。
我以前寫文件的代碼是(我上傳只有相關的代碼):
currVersionDir = NSFileManager.defaultManager().URLForUbiquityContainerIdentifier(nil)?.URLByAppendingPathComponent(DBVersionURL, isDirectory: false);
if (!NSFileManager.defaultManager().fileExistsAtPath((currVersionDir?.path)!))
{
NSFileManager.defaultManager().createFileAtPath((currVersionDir?.path!)!, contents: nil, attributes: nil);
}
let coord = NSFileCoordinator();
let err : NSErrorPointer = NSErrorPointer();
coord.coordinateWritingItemAtURL(currVersionDir!, options: .ForMerging, error: err, byAccessor: {(url : NSURL) in
do {
try dbVersion.writeToFile(currVersionDir!.path!, atomically: true, encoding: NSUTF8StringEncoding);
} catch { retVal = false; }
});
用來讀取文件中的代碼:
let coord = NSFileCoordinator();
let err : NSErrorPointer = NSErrorPointer();
do{
if (currDir != nil && isOnIcloud){
try NSFileManager.defaultManager().startDownloadingUbiquitousItemAtURL(currDir!);
}
} catch { }
coord.coordinateReadingItemAtURL(currVersionDir!, options: .WithoutChanges, error: err, byAccessor: {(url : NSURL) in
do {
currDbVersion = try NSString(contentsOfFile: currVersionDir!.path!, encoding: NSUTF8StringEncoding) as String;
} catch { }
});
使用協調的是由於蘋果的指示,即使沒有它也不行。
當此代碼在特定設備上運行時,它將起作用 - 文件被寫入並可被讀取。 當此代碼在一臺設備上運行時,該設備會在一段時間後關閉,而其他設備稍後啓動應用程序 - 幾乎總是無法從其他設備訪問該文件。
有沒有可以強制文件上傳的命令? 你知道什麼阻止它立即上傳嗎?
我是新來的iCloud,它似乎行事不端,雖然我確信這是我做錯了什麼.. 謝謝!