Просмотр нескольких таблиц с разными массивами - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть подробный вид, который показывает детали события, людей, которые участвуют, и людей, которые попросили принять участие.Я создал два массива разных типов, но они имеют одинаковые поля, только первая структура представляет пользователей с полем «status_confirm», равным 1 (следовательно, «Принятые пользователи»), а другая имеет «status_confirm», равным 0 (Пользователи, ожидающие принятия).Я объявил два массива, первый: var arrayUserAccepted = [User_accepted] ().Второй: var arrayUserWaiting = [User_waiting] (). Изображение структуры Следующий шаг: я заполняю эти структуры с помощью php-скрипта

func getData(){
    let url = URL(string: “MYURL”)
    URLSession.shared.dataTask(with:url!, completionHandler: {(data, response, error) in
    guard let data = data, error == nil else { return }
    do {
        let json = try JSONSerialization.jsonObject(with: data, options: []) as! [String:AnyObject]
        print("JSON: \n\(json)\n")
        let waiting = json["waiting"] as! [AnyObject]
        let accepted = json["accepted"] as! [AnyObject]
        DispatchQueue.main.async {
            for list_user_waiting in waiting {
                let id_user_waiting = list_user_waiting["id_user”] as! String
                let name_user_waiting = list_user_waiting[“name_user”] as! String
                let email_user_waiting = list_user_waiting["email"] as! String
                var photo_user_waiting = list_user_waiting[“photo”]
                let status_user_waiting = list_user_waiting["status”] as! String
                if photo_user_waiting is NSNull {
                    photo_user_waiting = ""
                }
                let listUserWaiting = User_waiting(id_user_waiting: id_user_waiting, name_user_waiting: name_user_waiting, email_user_waiting: email_utente_attesa, foto_waiting: photo_user_waiting as! String, status_waiting: status_user_waiting)
                self.arrayUserWaiting.append(listUserWaiting)
                self.tableViewListUserWaiting.reloadData()
            }

            for list_user_accepted in accepted {
                let id_user_accepted = list_user_accepted["id_utente"] as! String
                let name_user_accepted = list_user_accepted["name_utente"] as! String
                let email_user_accepted = list_user_accepted["email"] as! String
                var photo_user_accepted = list_user_accepted[“photo"]
                let status_user_accepted = list_user_accepted["status”] as! String
                if photo_user_accepted is NSNull {
                    photo_user_accepted = ""
                }
                let listUserAccepted = User_accepted(id_user: id_user_accepted, nome_utente: name_user_accepted, email: email_user_accepted, foto: photo_user_accepted as! String, stato: status_user_accepted)
                self.arrayUserAccepted.append(listUserAccepted)
                self.tableViewListUserAccepted.reloadData()
            }
        }
    } catch let error as NSError {
        print(error)
    }
}).resume()}

Это выше - функция, которую я вызываю в viewDidLoad ().Следующим шагом будет использование функций табличного представления, и именно здесь я думаю, что есть запрет

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    var count: Int?
    if tableView == self.tableViewListUserAccepted {
        count = arrayUserAccepted.count
    }
    if tableView == self.tableViewListUserWaiting {
        count = arrayUserWaiting.count
    }
    return count!
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
    if tableView == self.tableViewListUserAccepted {
        cell.imageProfileUserAccepted.image = UIImage(named: "imageDefault")
        cell.valueSliderUserAccepted.value = Float(50) //JUST FOR POPULATE THE INTERFACE
        cell.name_user_accepted.text = arrayUserAccepted[indexPath.row].name_user
    } 
    if tableView == self.tableViewListUserWaiting {
        cell.imageProfileUserWaiting.image = UIImage(named: "imageDefault")
        cell.valueSliderUserWaiting.value = Float(23) //JUST FOR POPULATE THE INTERFACE
        cell.name_user_waiting.text = arrayUserWaiting[indexPath.row].name_user_waiting
    }
    return cell
}

После того, как все это сделано, я запускаю приложение, но ничего.Таблицы пусты.В консоли скрипт отвечает мне правильно и поэтому не могу понять, где может быть ошибка.Излишне говорить, что я объявил .delegate и .dataSource обеих таблиц, как в Main.Storyboard, так и в коде.

1 Ответ

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

Все хорошо, просто измените формат условия IF, и оно будет работать.

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    var count: Int?
    if tableView == self.tableViewListUserAccepted {
        count = arrayUserAccepted.count
    } else {
        count = arrayUserWaiting.count
    }
    return count!
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    if tableView == self.tableViewListUserAccepted {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
        cell.imageProfileUserAccepted.image = UIImage(named: "imageDefault")
        cell.valueSliderUserAccepted.value = Float(50) //JUST FOR POPULATE THE INTERFACE
        cell.name_user_accepted.text = arrayUserAccepted[indexPath.row].name_user
        return cell
    } else {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
        cell.imageProfileUserWaiting.image = UIImage(named: "imageDefault")
        cell.valueSliderUserWaiting.value = Float(23) //JUST FOR POPULATE THE INTERFACE
        cell.name_user_waiting.text = arrayUserWaiting[indexPath.row].name_user_waiting
        return cell
    }

}

Также проверьте, установлены ли значения datasource и delegate обоих ваших tableView.Наконец, вызовите метод tableView.reloadTable() для обоих ваших табличных представлений после заполнения массивов методом viewDidLoad().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...