Проблема с диском iCloud: "[DocumentManager] Не удалось связать миниатюры для выбранного URL-адреса"
Я создал строковый файл JSON из объекта, содержащего несколько свойств. Это объект:
RecipeFile : Codable {
var name: String
var theRecipeIngredients: [String]
var theRecipeSteps: [String]
var theRecipeRating: Int
var theRecipeCategory: String
var theRecipeIndexStrings: String
var theRecipeImage: String?
Я создаю строковый файл JSON с этим кодом:
let json_encoder = JSONEncoder()
let recipeFileName = recipeToDisplay.name! + UUID().uuidString + ".json"
let exportFilePath = getDocumentsDirectory().appendingPathComponent(recipeFileName)
do {
let jsonData = try json_encoder.encode(exportRecipeFile)
if let jsonString = String(data: jsonData, encoding: .utf8)
{
try jsonString.write(to: exportFilePath, atomically: false, encoding: .utf8)
}
} catch {
print(error.localizedDescription)
}
Я загружаю его в iCloud Drive. Я импортирую строковый файл из iCloud Drive, используя UIDocumentPickerViewController. Я могу разобрать импортированный файл просто отлично. Однако я получаю это сообщение (отредактировано для удаления некоторой информации о пути) в области отладки xCode, когда вызывается func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]):
[DocumentManager] Не удалось связать миниатюры для выбранного файла URL:///....Bourbon%20Chocolate%20Walnut%20Pie18D20181-DAFD-499C-9873-7D3E0794C37A.json с файлом копии папки "Входящие":///....Bourbon%20Chocolate%20Walnut%20Pie18D20181-DAFD-499C-9873-7D3E0794C37A.json: домен ошибки = код QLThumbnail =2 "(ноль)" UserInfo={NSUnderlyingError=0x149a042b0 {домен ошибки = код пользователя GSLibraryErfoDomain> {NSDescription= Поколение не найдено}}}
Любая идея, что является причиной этого?
Код didPickDocumentsAt начинается следующим образом:
let data = try? Data(contentsOf: urls[0]) as Data
let json_decoder = JSONDecoder()
do {
let importRecipeFile = try json_decoder.decode(RecipeFile.self, from: data!)
let importedRecipeToSave = Recipe(context: theMOC)
importedRecipeToSave.name = importRecipeFile.name
importedRecipeToSave.category = importRecipeFile.theRecipeCategory
importedRecipeToSave.rating = Int16(importRecipeFile.theRecipeRating)
importedRecipeToSave.terms = importRecipeFile.theRecipeIndexStrings
importedRecipeToSave.addedToGroceryList = false
4 ответа
Вы можете смело игнорировать это сообщение. Когда вы импортируете файл из iCloud, iOS пытается скопировать миниатюру из iCloud в импортированную копию, но для файлов JSON нет миниатюры для копирования, и она регистрирует это. Это не ошибка на вашей стороне.
Я могу воспроизвести эту проблему с помощью SwiftUI с iOS 14. После того, как изначально я представляю
UIDocumentPickerViewController
после
ToolbarItem
нажал и работает нормально. Позже я реорганизую UI, и он выталкивается из другого родителя.
View
и эта ошибка возникает, а JSON не получен.
То же самое случилось со мной, и я не нашел конкретного решения ни на одном форуме. Но тестирование и микширование кода, который я нашел на форумах, наконец-то помогли мне. Но я точно не знаю, что случилось.
Я оставляю вам свой код на случай, если он будет вам полезен, хотя с момента вашего вопроса прошло много месяцев.
func importarCsv(sender: UIBarButtonItem){
let types = [kUTTypePDF,kUTTypeUTF8PlainText]
let importMenu = UIDocumentPickerViewController(documentTypes: types as [String], in: .import)
if #available(iOS 11.0, *){
importMenu.allowsMultipleSelection = false
}
importMenu.delegate = self
present(importMenu, animated: true, completion: nil)
}
extension MaterialViewController: UIDocumentPickerDelegate{
internal func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentAt urls: URL){
print("urls : \(urls)")
}
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
print("close")
controller.dismiss(animated: true, completion: nil)
}
}
У меня была эта проблема, когда я представил UIDocumentPicker из другого UIViewController перед добавлением его в качестве дочернего контроллера представления на его родительском контроллере представления.