В AppDelegate.swift
при первом запуске намерение состоит в том, чтобы поместить некоторые образцы документов в локальную папку «Документы» или в папку «Документы iCloud», если iCloud включен.
var templates = NSBundle.mainBundle().pathsForResourcesOfType(AppDelegate.myExtension, inDirectory: "Templates")
dispatch_async(appDelegateQueue) {
self.ubiquityURL = NSFileManager.defaultManager().URLForUbiquityContainerIdentifier(nil)
if self.ubiquityURL != nil && templates.count != 0 {
// Move sample documents from Templates to iCloud directory on initial launch
for template in templates {
let tempurl = NSURL(fileURLWithPath: template)
let title = tempurl.URLByDeletingPathExtension?.lastPathComponent
let ubiquitousDestinationURL = self.ubiquityURL?.URLByAppendingPathComponent(title!).URLByAppendingPathExtension(AppDelegate.myExtension)
// let exists = NSFileManager().isUbiquitousItemAtURL(ubiquitousDestinationURL!)
do {
try NSFileManager.defaultManager().setUbiquitous(true, itemAtURL: tempurl, destinationURL: ubiquitousDestinationURL!)
}
catch let error as NSError {
print("Failed to move file \(title!) to iCloud: \(error)")
}
}
}
return
}
Перед запуском я удаляю приложение с устройства и убеждаюсь, что в iCloud нет документа с таким именем. При первом запуске без iCloud образцы документов правильно копируются в локальную папку «Документы». В iCloud этот код запускается, и вызов setUbiquitous
приводит к ошибке, в которой говорится, что файл уже существует. Прокомментированный вызов isUbiquitousItemAtURL
также возвращает true.
Что может заставлять эти вызовы регистрировать существование файла, которого, я уверен, нет? Спасибо!