Проблема с диском 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 перед добавлением его в качестве дочернего контроллера представления на его родительском контроллере представления.

Другие вопросы по тегам