Завершение приложения из-за необработанного исключения «NSInternalInconsistencyException». Получение ошибки в табличном представлении - PullRequest
0 голосов
/ 14 апреля 2020

Получение следующей ошибки при выборе и отмене выбора строки таблицы.

Завершение приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «Модификации механизма компоновки не должны выполняться из фонового потока. после обращения к нему из основного потока. '

    URLSession.shared.dataTask(with: url!) { (data, response, error) in

        guard let data = data else {return}
        do
        {
            let json = try JSON(data:data)
            let result = json["data"]

            for arr in result.arrayValue{

                self.arrData.append(filterCity (json: arr))

                DispatchQueue.main.async {
                        self.filter_Table.reloadData()
                    }
            }


        }
        catch{
            print(error.localizedDescription)
        }

    }.resume()

1 Ответ

1 голос
/ 14 апреля 2020

Я не видел весь ваш код, но вам, вероятно, не следует обращаться к arrData из фонового потока. Кроме того, перезагрузите табличное представление только один раз. Это должно предотвратить крэ sh.

DispatchQueue.main.async {
    for arr in result.arrayValue {
        self.arrData.append(filterCity (json: arr))
    }
    self.filter_Table.reloadData()
}

Но этот код может быть изменен в дальнейшем. Прежде всего, вы всегда добавляете в массив, но никогда не создаете новый. Если вы выполните свой веб-запрос дважды, ваши данные будут дублированы, если вы добавите их в тот же массив. Решением будет воссоздать ваш массив и назначить его, когда закончите.

let array = result.arrayValue.map { self.filterCity(json: $0) }
DispatchQueue.main.async {
    self.arrData = array
    self.filter_Table.reloadData()
}
...