загрузить большие данные из пожарного магазина в табличное представление Swift - PullRequest
0 голосов
/ 05 июля 2018

FireStore для хранения более 500 информации, и я хочу, чтобы отобразить ее в виде таблицы. По сути, я успешно отобразил все данные в своей ячейке, но проблема в том, что загрузка всех данных занимает более 1 минуты. Пока данные загружены, я не могу прокрутить табличное представление, пока все данные не закончат загрузку. Как включить прокрутку во время загрузки данных? Если это невозможно, как сначала загрузить первые 20 данных, и будет ли продолжаться загрузка, если пользователь находится в конце ячейки? Вот код, который я пытался получить данные из пожарного магазина:

    func getData () {
    db.collection("fund").getDocuments()
        {
            (querySnapshot, err) in

            if let err = err
            {
                print("Error getting documents: \(err)");
            }
            else
            {
                for document in querySnapshot!.documents {
                    let data = document.data()
                    let agencyPath = data["agensi"] as? String ?? ""
                    let title = data["title"] as? String ?? ""
                    let program = data["program"] as? String ?? ""
                    let perniagaan = data["perniagaan"] as? String ?? ""
                    let newMax = data["max"] as? Int
                    let agencyId = document.documentID
                    let query = Firestore.firestore().collection("Agensi")
                    let newQuery = query.whereField("name", isEqualTo: "\(agencyPath)")

                    newQuery.getDocuments()
                        {
                            (querySnapshot, err) in

                            if let err = err {
                                print("Error getting documents: \(err)");
                            } else
                            {
                                for document in querySnapshot!.documents {
                                    let data = document.data()
                                    let logo = data["logo"] as? String ?? ""
                                    //store to Struct
                                    let newModel = DisplayModel(agency: title, agencyId: agencyId, programTag: program, perniagaanTag: perniagaan, max: newMax, agencyPath: agencyPath, logoUrl: logo, agencyTitle: agencyPath)
                                    self.agencyList.append(newModel)
                                }
                                self.tableView.reloadData()
                                self.dismiss(animated: false, completion: nil)
                            }
                    }
                }

            }
    }
}

отображать данные в ячейке:

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

    if searchController.searchBar.text != "" {
        cellData = filteredData[indexPath.row]

    } else {
        cellData = agencyList[indexPath.row]

    }

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as? HomeTableViewCell

    cell?.agencyName.text = cellData.agency
    cell?.agencyImage.sd_setImage(with: URL(string: "\(cellData.logoUrl ?? "")"), placeholderImage: UIImage(named: "no_pic_image"))

    return cell!


}

Действие в последнем ряду ячейки:

    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {

    if searchController.searchBar.text != "" {
       let lastElement = filteredData.count - 1
        if indexPath.row == lastElement {
            //getData()
            // handle your logic here to get more items, add it to dataSource and reload tableview
        }
    } else {
        let lastElement = agencyList.count - 1
        if indexPath.row == lastElement {
            //getData()
            // handle your logic here to get more items, add it to dataSource and reload tableview
        }

    } 
}

Я действительно понятия не имею, какой метод я должен сделать, чтобы сначала загрузить 20 данных и продолжить загрузку в конце строки ячейки, если нет решения, по крайней мере, я мог бы прокрутить табличное представление во время сеанса загрузки. Спасибо за вашу информацию, я только учусь быстро в прошлом месяце. Спасибо за помощь.

1 Ответ

0 голосов
/ 05 июля 2018

Вы должны окончательно принять протокол UITableViewDataSourcePrefetching.

Проверьте некоторые блоги, например: https://www.raywenderlich.com/187041/uitableview-infinite-scrolling-tutorial

и примените его к нумерации страниц, как описано здесь: https://firebase.google.com/docs/firestore/query-data/query-cursors

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