Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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
Arrays 需要在CloudKit查询后立即触发完成块_Arrays_Swift_Tableview_Cloudkit_Completionhandler - Fatal编程技术网

Arrays 需要在CloudKit查询后立即触发完成块

Arrays 需要在CloudKit查询后立即触发完成块,arrays,swift,tableview,cloudkit,completionhandler,Arrays,Swift,Tableview,Cloudkit,Completionhandler,我一直在思考如何编写CloudKit完成块。我的问题是我正在加载数据,然后将数据放在tableView中。问题是我必须用一个按钮手动刷新tableView,而不是将数据自动加载到其中。我需要的是在查询结束时使用一个完成块来重新加载表数据。下面是我的查询功能: func loadGroupPage() { print("should go") // let pred = NSPredicate(format: "Username = %@", usernameText) l

我一直在思考如何编写CloudKit完成块。我的问题是我正在加载数据,然后将数据放在tableView中。问题是我必须用一个按钮手动刷新tableView,而不是将数据自动加载到其中。我需要的是在查询结束时使用一个完成块来重新加载表数据。下面是我的查询功能:

func loadGroupPage() {
    print("should go")
    // let pred = NSPredicate(format: "Username = %@", usernameText)
    let pred = NSPredicate(format: "groupName = %@", "\(selectedCellName)")
    let query = CKQuery(recordType: "Group", predicate: pred)
    let operation = CKQueryOperation(query: query)
    //operation.resultsLimit = CKQueryOperationMaximumResults
    operation.recordFetchedBlock = { (record: CKRecord!) in
       operation.qualityOfService = .default

        if record != nil{

            // setup screen after loading data

            self.recordToUpdate = record

            if creatingNewPost == true{
                print(feed)
                //create new post record (modify record)
                feed.append(postText)
                creatingNewPost = false
                self.saveNewPost()
            }

            self.publicOrPrivate = (record.object(forKey: "PublicOrPrivate") as! String)
            if self.publicOrPrivate == "Public"{
                // public
                //print("you have joined")

            }else if self.publicOrPrivate == "Private"{
                // private
                //print("requestSent")
                // self.sendRequest()
                 self.requests = (record.object(forKey: "Requests") as! Array)
            }
            if self.groupMembs.contains(username) || members.contains(username){
                self.joinBtn.alpha = 0
                // in group
            }else{
                self.joinBtn.alpha = 1
            }
            if self.leaders.contains(username) && self.publicOrPrivate == "Private"{
                // leader
                self.requestsTableView.alpha = 1
            }else{
                self.requestsTableView.alpha = 0
            }
            if self.groupMembs.contains(username) || self.publicOrPrivate == "Public"{
                // leader

                feed = (record.object(forKey: "groupFeed") as! Array)
                print(feed)
            }else{

            }
            self.groupMembs = (record.object(forKey: "memberUsernames") as! Array)

            print(self.groupMembs)
            self.numberOfMembersInGroup = self.groupMembs.count
            self.groupNameLbl.text = selectedCellName
            self.numberOfMembersLbl.text = "\(self.numberOfMembersInGroup) Members"
            self.leaders = (record.object(forKey: "leaders") as! Array)

            //****************************************************
            // this does nothing until I refresh it manually!
            self.requestsTableView.reloadData()
            self.groupFeedTableView.reloadData()
            //****************************************************
            //Need completion block so the above two lines will fire directly after data is done loading!
        }

    }
    database.add(operation)    
}

正如我在上面的代码中所记录的,刷新那里的表不会在实际的UI中加载任何内容。有人能帮我写一个完成块来重新加载tableView吗?谢谢

更新:

我使用以下代码添加了一个补全:

operation.queryCompletionBlock = { [unowned self] (cursor, error) in
        DispatchQueue.main.async {
            if error == nil {

                self.tableView.reloadData()

            }
        }
    }

工作起来很有魅力

这与我在对的回答中向您展示的一点也不接近。@rmaddy别担心,这是一个完全不同的查询。我不再有阵列问题了。现在是如何为这个重新加载表的查询编写完成项(我对上一个问题的解决方案不涉及完成项,因为我在网上找不到任何易于理解的注释)我对你前面问题的回答与你在这里应该做的完全相同。查询的细节可能不同,但结构是相同的。@rmaddy所以具体地说,我应该如何编写完成,因为我不知道要写什么,而在线资源对我帮助不大。