我一直在尝试使用fetchRecords函数来填充CKRecords数组来填充UITableView单元格。当我运行应用程序时,UITableView在fetchRecords函数之前调用numberOfRowsInSection函数。
func fetchRecords(){
let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: "Counter", predicate: predicate)
let queryOperation = CKQueryOperation(query: query)
queryOperation.recordFetchedBlock = { (record : CKRecord!) in
self.objects.append(record)
println("recordFetchedBlock: \(record)")
}
cloudKitHelper.privateDB.addOperation(queryOperation)
/*
cloudKitHelper.privateDB.performQuery(query, inZoneWithID: nil, completionHandler: {(results, error) ->Void in
if error != nil{
println(error)
}
else {
println(results)
for result in results{
self.objects.append(result as! CKRecord)
println(self.objects[0].valueForKey("Title"))
println(self.objects[0].valueForKey("Count"))
}
}
})*/
}
我尝试过使用addOperation和performQuery来获取记录。两者似乎都正常工作,他们只是在UITableView已经运行numberOfRowsInSection方法后获取记录,该方法返回objects.count
override func viewDidLoad() {
super.viewDidLoad()
fetchRecords()
如您所见,fetchRecords()是超级调用后在viewDidLoad()中调用的第一个东西。
我试图找出如何在加载UITableView之前用CKRecords加载对象数组
答案 0 :(得分:0)
您需要更新主调度线程上的UI元素。 recordFetchedBlock
将被多次调用 - 大概每次,当记录变为可用时,您将需要更新表视图。试试这个:
queryOperation.recordFetchedBlock = { (record : CKRecord!) in
println("recordFetchedBlock: \(record)")
dispatch_async (dispatch_get_main_queue()) {
self.objects.append(record)
self.tableView.reloadData()
}
}