#ios #swift #icloud #appdelegate
#iOS #swift #icloud #appdelegate
Вопрос:
При AppDelegate.swift
первом запуске предполагается поместить некоторые образцы документов в локальную папку Documents или в папку iCloud Documents, если включен iCloud.
var templates = NSBundle.mainBundle().pathsForResourcesOfType(AppDelegate.myExtension, inDirectory: "Templates")
dispatch_async(appDelegateQueue) {
self.ubiquityURL = NSFileManager.defaultManager().URLForUbiquityContainerIdentifier(nil)
if self.ubiquityURL != nil amp;amp; 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 образцы документов правильно копируются в локальную папку Documents. В iCloud выполняется этот код, и в setUbiquitous
результате вызова выдается сообщение об ошибке, в котором говорится, что файл уже существует. Прокомментированный вызов isUbiquitousItemAtURL
также возвращает true.
Что может заставить эти вызовы регистрировать, что файл существует, которого, я уверен, нет? Спасибо!
Ответ №1:
Файл уже существует, поэтому просто замените его
Комментарии:
1. Других доказательств их существования нет. Метазапрос, который показывает облачные файлы, не находит их, но находит все другие документы. Не удается найти их через файловую систему Mac (папку iCloud). Не удается найти их с помощью iMazing. Я понимаю, что он находит что-то, что заставляет его генерировать эту ошибку, но я не могу понять, что или где.
Ответ №2:
Основной solution…in из-за всех проб и ошибок я забыл вставить «Документы» обратно в URL-адрес. Должно быть:
let ubiquitousDestinationURL = self.ubiquityURL?.URLByAppendingPathComponent("Documents").URLByAppendingPathComponent(title!).URLByAppendingPathExtension(AppDelegate.myExtension)
Без этого файл был записан в неправильный каталог, и поэтому я не мог видеть его обычными средствами.