【问题标题】:Not able to load data in segmented control tableview from Firestore database无法从 Firestore 数据库加载分段控制表视图中的数据
【发布时间】:2019-09-25 06:25:41
【问题描述】:

我正在尝试通过从 Firestore 数据库获取数据来填充分段控件的表格视图,但由于某种原因我无法这样做,我正在尝试一个在线可用的示例,其中包含预设数据,但在这里我正在从 Firestore 数据库中检索数据。

它也没有给出任何运行时错误,只是没有加载数据。下面是代码的视图控制器的屏幕截图。请帮忙

class FirstSegementViewController: UIViewController {

    @IBOutlet var segmentControl:UISegmentedControl!

    @IBOutlet var tableView: UITableView!

    var s1Post:[s1] = []
    var s2Post:[s2] = []


    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        retrieveAllPosts()
    }


    func retrieveAllPosts(){
        let postsRef = Firestore.firestore().collection("posts").limit(to: 50)

        postsRef.getDocuments { (snapshot, error) in

            if let error = error {

                print(error.localizedDescription)

            } else {

                if let snapshot = snapshot {

                    for document in snapshot.documents {


                        let data = document.data()
                        //self.postKey = document.documentID
                        let username = data["post_author_username"] as? String ?? ""
                        let postTitle = data["postTitle"] as? String ?? ""
                        let postcategory = data["postcategory"] as? String ?? ""
                        let postContent = data["postContent"] as? String ?? ""
                        let postAuthorProfilePicUrl = data["post_user_profile_pic_url"] as? String ?? ""
                        let postAuthorSpinnerC = data["post_author_spinnerC"] as? String


                        let newSourse = s1(_documentId: document.documentID, _username: username, _postTitle: postTitle, _postcategory: postcategory, _postContent: postContent, _postuserprofileImagUrl: postAuthorProfilePicUrl, _postAuthorSpinncerC: postAuthorSpinnerC)

                        self.s1Post.append(newSourse)
                        // print(self.postKey)
                    }
                    self.tableView.reloadData()
                }
            }
        }
    }




    @IBAction func indexChanged(_ sender: UISegmentedControl) {
          switch segmentControl.selectedSegmentIndex
         {
         case 0:
            retrieveAllPosts()
         // label1.text = "First Segment Selected"
         case 1:

            retrieveAllPosts()
         // label1.text = "Second Segment Selected"
         default:
         break
         }

        //self.tableView.reloadData()
    }

    /*
     // MARK: - Navigation

     // In a storyboard-based application, you will often want to do a little preparation before navigation
     override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
     // Get the new view controller using segue.destination.
     // Pass the selected object to the new view controller.
     }
     */



    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    }
    */

}


extension FirstSegementViewController: UITableViewDelegate, UITableViewDataSource{

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        var value = 0
        switch segmentControl.selectedSegmentIndex{
        case 0:
            value = s1Post.count
            break
        case 1:
            value = s2Post.count
            break
        default:
            break
        }
        return value
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) as! MyWsPostCell
        switch segmentControl.selectedSegmentIndex{
        case 0:
            cell.s11 = s1Post[indexPath.row]
            break
        case 1:
            cell.s21 = s2Post[indexPath.row]
            break

        default:
            break
        }
        return cell
    }


}

【问题讨论】:

  • 您是否检查过从您的演示数组中添加虚拟数据?它工作正常吗?你也连接了tableView.delegate = selftableView.dataSource = self

标签: swift firebase uitableview google-cloud-firestore uisegmentedcontrol


【解决方案1】:

您似乎只为 self.s1Post 设置值。

【讨论】:

  • 是的,只是为了检查一下,我应该为两者设置值吗?我试图检索至少一个列表
猜你喜欢
  • 2023-03-04
  • 2021-12-18
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
  • 2015-06-15
  • 2019-11-15
  • 2012-07-10
相关资源
最近更新 更多