Swift Tableview загружает данные, получая индекс вне диапазона - PullRequest
0 голосов
/ 15 февраля 2019

Мой сценарий, я пытаюсь загрузить JSON данные в Tableview.Здесь Tableview custom 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
    }
}

1 Ответ

0 голосов
/ 16 февраля 2019

Ожидается использование нескольких массивов при использовании 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 * 1007.*

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 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...