Xcode выдает общую ошибку (EXC_BAD_ACCESS) при попытке синтаксического анализа JSON в Swift

#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. Это всегда воспроизводимо для одних и тех же тестовых данных или это случайно? Я предполагаю, что это какой-то асинхронный вызов, можете ли вы протестировать локальные данные не асинхронным способом?