Nano Hash - криптовалюты, майнинг, программирование

Загрузка данных Swift Tableview выводит индекс за пределы допустимого диапазона

Мой сценарий: я пытаюсь загрузить данные JSON в Tableview. Вот, Tableview обычай cell я поддерживаю. Всякий раз, когда я пытаюсь загрузить данные в tableview, у меня может появиться возможность добавить новые данные из server. Здесь при загрузке я получаю ошибку Index вне диапазона. Каждый раз, когда я вызываю функцию JSON из viewWillAppear. Мне хватает data, внутри моего массива ничего неровного нет. Ниже code я использую

override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated) // No need for semicolon

        self.tableArray.removeAll()
        self.cartname.removeAll()
        self.parentid.removeAll()
        self.name.removeAll()
        self.year.removeAll()

        parseJSON()
    }

Это мой процесс JSON

if let content = json["content"] as? [[String:String]] {
            print(json)
            for category in content {
                let cat_id = category["cat_id"]
                let cat_name =  category["cat_name"]
                let cat_parentid =  category["cat_parentid"]
                let name =  category["name"]
                let year =  category["year"]


                self.tableArray.append(cat_id ?? "unknnown")
                self.cartname.append(cat_name ?? "unknnown")
                self.parentid.append(cat_parentid ?? "unknnown")
                self.name.append(name ?? "unknnown")
                self.year.append(year ?? "unknnown")
            }

Загрузка данных ячейки таблицы

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! MyCustomCell

        cell.cat_id.text = self.tableArray[indexPath.row]
        cell.cat_name.text = self.cartname[indexPath.row]// Some time Here I am getting out of range error
        cell.cat_parentid.text = self.parentid[indexPath.row]
        cell.name.text = self.name[indexPath.row]  // Here I am getting out of range error
        cell.year.text = self.year[indexPath.row]

        return cell
    }
}
15.02.2019

Ответы:


1

При использовании tableView ожидается несколько массивов. Сначала из точки OOP вам нужно создать 1 модель, например

struct Root: Codable {
    let catID, catName, catParentid, year,name: String? 

    enum CodingKeys: String, CodingKey {
        case catID = "cat_id"
        case catName = "cat_name"
        case catParentid = "cat_parentid"
        case year, name
    }
}

и используйте Codable для разбора json

var arr = [Root]()

do {  
  let content = json["content"] as! [[String:String]]
  let staData = try JSONSerialization.data(withJSONObject:content,options:[]) 
  arr = try JSONDecoder().decode([Root].self, from:staData) 
} 
catch {
   print(error)
}

в числе строк

return arr.count

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! MyCustomCell
        let item = arr[indexPAth.row]
        cell.cat_id.text = item.catID
        cell.cat_name.text = item.catName
        cell.cat_parentid.text = item.catParentid
        cell.name.text = item.name  
        cell.year.text = item.year 
        return cell 
}
15.02.2019
  • Спасибо за Ваш ответ. Я воссоздам свой JSON. @Sh_Khan 16.02.2019
  • Как получить значения внутри ячейки для строки по индексу @Sh_Khan 16.02.2019
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..