UITable View не заполняется из декодированного документа Firebase - PullRequest
0 голосов
/ 09 марта 2020
import UIKit
import Firebase
import FirebaseAuth

class OtherRideSearchViewController: UIViewController, UITableViewDelegate,UITableViewDataSource {

    @IBOutlet weak var SearchBar: UISearchBar!
    @IBOutlet weak var TableView: UITableView!
    let myUsers = [MyUser]()
    //var riderList = [RiderList]()

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view.
        TableView.dataSource = self
        TableView.delegate = self
    }

    func getUsers(){
    let db = Firestore.firestore()
     db.collection("users").getDocuments() { (snapshot, err) in
         if let err = err {
             print("Error getting documents: \(err)")
         } else {
            let documents = snapshot!.documents

           try! documents.forEach{document in
            let myUser: MyUser = try document.decoded()
            print(myUser.firstName)
            }
         }
     }
  }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return myUsers.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "RiderListCell", for: indexPath)
        let user = myUsers[indexPath.row]
        cell.textLabel!.text = user.firstName
        cell.detailTextLabel?.text = user.lastName

        return cell
    }
}

Мне не удается заполнить табличное представление, я получаю данные из firebase fine и декодирую их в шаблон MyUser, но ячейка просто не заполняется,

Я пытался просто ссылаясь на UITableViewCell и добавляя к нему текст также без ячейки dequeReusable, и это тоже не сработало, поэтому я предполагаю, что что-то не так с представлением таблицы и использованием ячейки.

   import Foundation

struct MyUser: Decodable{
    let firstName : String
    let lastName : String
    let email : String
    let uid : String
}

Console output from printing getUsers

Picture of the storyboard view im using

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Итак, я добавил несколько шагов, которые вы можете выполнить, чтобы выполнить sh это.

Убедитесь, что вы всегда называете свои переменные / выходы в нижнем регистре. как "tableView", а не "TableView"

//1.) Fix your array like this
let myUsers:[MyUser] = []

override func viewDidLoad() {
    super.viewDidLoad()

    //2.) Call the getUser method
    getUsers()

    //TIP! Always start your variables / outlets with lowercased, like "tableView"
    TableView.dataSource = self
    TableView.delegate = self
}

func getUsers(){
    let db = Firestore.firestore()
    db.collection("users").getDocuments() { (snapshot, err) in
    if let err = err {
        print("Error getting documents: \(err)")
    } else {
        let documents = snapshot!.documents

        try! documents.forEach{document in
        let myUser: MyUser = try document.decoded()
            print(myUser.firstName)

            //3.)Appending the data to the array
            myUsers.append(myUser)
        }

        //4.) Reloading your tableview AFTER the foreach
        self.TableView.reloadData()
        }
    }
}
1 голос
/ 09 марта 2020
  1. Внутри getUsers() обновите массив myUsers с полученными данными.
  2. Попробуйте перезагрузить tableView после обновления массива myUsers.

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