Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift self.tableview.reloaddata()在抓取数据后不重新加载_Swift - Fatal编程技术网

Swift self.tableview.reloaddata()在抓取数据后不重新加载

Swift self.tableview.reloaddata()在抓取数据后不重新加载,swift,Swift,所以基本上我从firebase获取数据并将其加载到我的tableview中我添加了一个快照侦听器来侦听更改,但是当更改发生时,我的tableview会重新加载任何想法为什么?idk如果我把它放错位置了 //============================================================================================== func grabUserPosts(){ var userid : String!

所以基本上我从firebase获取数据并将其加载到我的tableview中我添加了一个快照侦听器来侦听更改,但是当更改发生时,我的tableview会重新加载任何想法为什么?idk如果我把它放错位置了

 //==============================================================================================
func grabUserPosts(){
    var userid : String!

    if Auth.auth().currentUser != nil{

        userid = Auth.auth().currentUser!.uid

    }else if(AccessToken.current != nil) {
      userid = AccessToken.current!.userID
    }

    FirebaseReferece(.quoteMe).order(by: "timestamp", descending: true).whereField(rOWNERID, isEqualTo: userid).addSnapshotListener { (snapshot, error) in
        if(error != nil){
            print(error!.localizedDescription)
        }else {

            if snapshot != nil {

                snapshot!.documentChanges.forEach({ (change) in
                    if change.type == .added {

                       // for alldocument in snapshot!.documents {

                            //let data = alldocument.data()

                            let data = change.document.data()


                            let text = data["quoteMeText"]as! String
                            let author = data["QuoteMeAuthor"] as? String

                            let PostInit = quoteME(authorID: author ?? "", quoteText: text)

                            self.userPosts.append(PostInit)





                    }
                    self.tableView.reloadData()

                })

            }

        }
    }



}

在主线程和循环外部调用它

DispatchQueue.main.async {
                    self.tableView.reloadData()
                }
您的函数将如下所示

func grabUserPosts(){
    var userid : String!

    if Auth.auth().currentUser != nil{

        userid = Auth.auth().currentUser!.uid

    }else if(AccessToken.current != nil) {
      userid = AccessToken.current!.userID
    }

    FirebaseReferece(.quoteMe).order(by: "timestamp", descending: true).whereField(rOWNERID, isEqualTo: userid).addSnapshotListener { (snapshot, error) in
        if(error != nil){
            print(error!.localizedDescription)
        }else {



                snapshot?.documentChanges.forEach({ (change) in
                    if change.type == .added {

                       // for alldocument in snapshot!.documents {

                            //let data = alldocument.data()

                            let data = change.document.data()


                            let text = data["quoteMeText"]as! String
                            let author = data["QuoteMeAuthor"] as? String

                            let PostInit = quoteME(authorID: author ?? "", quoteText: text)

                            self.userPosts.append(PostInit)





                    }


                })

                DispatchQueue.main.async {


                 self.tableView.reloadData()
                }



        }
    }



}

但请注意,这是斯威夫特!摆脱那些丑陋的客观检查。如果快照!=nil{snapshot!.documentChanges…与
snapshot?.documentChanges…
这是你在@vadian写的漂亮的一行。。。