我在视图控制器中创建了一个表视图,并尝试设置它将具有的行数。金额从数据库返回,然后传递给正确的方法(见下文)。问题是可见行数与从数据库返回的数量不同。
在.viewDidLoad()
中 self.activeIDs.delegate = self
self.activeIDs.dataSource = self
self.activeIDs.rowHeight = 30
self.activeIDs.reloadData()
应该“设置”表格视图的方法
func tableView(tableView: UITableView,
cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
let cell = activeIDs.dequeueReusableCellWithIdentifier("idCell", forIndexPath: indexPath) as UITableViewCell
cell.textLabel!.text = "Test"
return cell
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView,
numberOfRowsInSection section: Int) -> Int {
var numberOfRows = 0 //Assigning default value
SQLHandler.getActiveIDAmount {
amountOfIDs in
numberOfRows = amountOfIDs.description.toInt()!
println(numberOfRows) //Displays correct (database) value
}
return numberOfRows //Returns correct value EDIT: wrong value.
}
除了获得所需的行数(4)之外,我总是,尽管我从数据库获得的价值最终得到6?行动中的表格视图的屏幕截图:http://gyazo.com/753f326177dc8cd6b1734f4d19681d71
有什么问题?我做错了什么?
答案 0 :(得分:2)
您调用SQLHandler的方法是一个完成处理程序,这意味着swift将继续执行您的代码并且刚好(并返回numberOfRowns = 0)而不是之后(当请求完成时)它将返回到块:
SQLHandler.getActiveIDAmount {
amountOfIDs in
numberOfRows = amountOfIDs.description.toInt()!
println(numberOfRows) //Displays correct (database) value
//add the values returned to your dataset here
//call refresh table and dispatch in the main thread in case
//this block is running in a background thread
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.tableView.reloadData()
})
}
并打印行数。
您需要做的是在代码中的其他位置调用函数SQLHandler.getActiveIDAmount
,并在回调完成后调用call table.reloadData()
。
我希望能帮到你!