#json #swift #xcode #macos #parsing
#json #swift #xcode #macos #синтаксический анализ
Вопрос:
При синтаксическом анализе JSON я получаю странную ошибку Xcode. Обычно этот код работает нормально. (Я получаю отличные результаты примерно для дюжины папок, только одна выдает ошибку (ниже).) (До этого у меня было множество ошибок декодирования JSON, затем я пометил элементы объекта swift как необязательные, после чего все работало .. до).
Вот фрагмент кода, который я использую:
getContentWithToken(path, completion: { (result) in
guard let json = result as? Data else {
print("cannot get data from response")
DispatchQueue.main.async {
self.showAlert("Error", "cannot get data from response", ["OK"], completion: { (response) in
})
}
return
}
do {
let items = try JSONDecoder().decode(DItem.self, from: json)
print ("items: (items)")
...
} catch {
print("error: (error)")
...
}
}
Xcode выделяет первую строку в разделе do (позвольте элементам = попробовать …) и выдает ошибку «Поток 11: EXC_BAD_ACCESS (код = 2, адрес = 0x7000065e3ff8)».
AFAIK, с помощью операторов do..catch, если какая-либо часть в do завершается неудачей, то используется catch, поскольку ошибка xcode не возникает. Например, несколько раз не удалось выполнить do{}, а catch{} выполнялся и отображался там, где произошел сбой JSON…
ПРИМЕЧАНИЕ: Чтобы избежать необязательных ошибок принудительного развертывания, код использует guard и do..catch. Этот подход также выдает точные ошибки синтаксического анализа JSON, если таковые имеются. Также мой объект dItem соответствует Codable. Я пытаюсь проанализировать данные JSON, используя данный API, чтобы получить список файлов / вложенных папок в диапазоне папок.
Есть ли способ избежать этой ошибки Xcode?
Комментарии:
1. Я предполагаю, что проблема в JSON или в вашем кодируемом объекте, если вы можете, опубликуйте этот код, и мы увидим.
2. @Adis Поскольку это сложно и долго, я попытался добавить в pastebin: pastebin.com/F1uy6YDR
3. Это всегда воспроизводимо для одних и тех же тестовых данных или это случайно? Я предполагаю, что это какой-то асинхронный вызов, можете ли вы протестировать локальные данные не асинхронным способом?