2015-12-24 1 views
0

Я пишу приложение, которое синхронизирует данные между различными устройствами с использованием документов 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 { } 
}); 

Использование координаторе из-за инструкций Apple, даже без этого не работает.

Когда этот код работает на определенном устройстве, он работает - файл написан и может быть прочитан. Когда этот код работает на одном устройстве, устройство отключается через некоторое время, а другое устройство запускает приложение позже - почти всегда файл недоступен с других устройств.

Есть ли какая-либо команда, которую я могу выполнить, которая заставит файл загружаться? Вы знаете, что не позволяет загрузить его немедленно?

Я новичок в iCloud, и, похоже, это неправильно, хотя я уверен, что это то, что я делаю неправильно. Спасибо!

ответ

0

Похоже, проблема возникает только при использовании симулятора iOS. При использовании двух реальных устройств синхронизация работает в разумные сроки, поэтому я предполагаю, что это ошибка в симуляторе.

Кроме того, Apple рекомендует создать файл локально, во временной библиотеке, и вызов NSFileManager.defaultManager().setUbiquitous(... для перемещения файла ICloud (в приведенном выше коде я создаю файл сначала в библиотеке ICloud.

Надежда других людей найдет это полезным, я сжег несколько дней по этому вопросу ...