0
CloudKitコンプリートブロックを作成する方法について考えています。私の問題は、データを読み込んで、次にデータをtableViewに入れていることです。問題は、データを自動的にロードするのではなく、ボタンを使って手動でtableViewを更新する必要があることです。私が必要とするのは、テーブルデータをリロードするクエリの最後の完了ブロックです。以下は私のクエリ関数です:CloudKitクエリの直後にコンプリートブロックを起動する必要があります
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(s)を単にリロードする完了ブロックを書いてください。ありがとう!
これは[あなたの前の質問](https://stackoverflow.com/questions/47254502/table-will-not-load-show-cloudkit-data)に私があなたに示したものに遠く離れていません)。 – rmaddy
@rmaddyこれはまったく異なるクエリであるとは心配しないでください。私はもはやアレイの問題を持っていません。これで、テーブルをリロードするこのクエリの補完をどのように書くのですか(最後の問題に対する私の解決策は、オンラインでメモを辿るのが簡単でないため、完了を伴わなかった) –
私の以前の質問に対する答えはあなたがここでやっているのとまったく同じこと。クエリの詳細は異なる場合がありますが、構造は同じです。 – rmaddy