Ios UITableView未显示正确的行数
我已经在视图控制器中创建了一个表视图,并且正在尝试设置它将拥有的行数。该金额从数据库返回,然后传递到正确的方法(请参见下文)。问题是可见行的数量与从数据库返回的数量不同 在.viewDidLoad()中 应该“设置”表视图的方法 尽管我从数据库中获得了值,但我总是以6作为结束,而不是获得所需的行数(4)?正在运行的表视图的屏幕截图:Ios UITableView未显示正确的行数,ios,swift,uitableview,Ios,Swift,Uitableview,我已经在视图控制器中创建了一个表视图,并且正在尝试设置它将拥有的行数。该金额从数据库返回,然后传递到正确的方法(请参见下文)。问题是可见行的数量与从数据库返回的数量不同 在.viewDidLoad()中 应该“设置”表视图的方法 尽管我从数据库中获得了值,但我总是以6作为结束,而不是获得所需的行数(4)?正在运行的表视图的屏幕截图: 有什么问题?我做错了什么?您调用的SQLHandler方法是一个完成处理程序,这意味着swift将继续执行您的代码,并在(返回numberOfRowns=0)之后(
有什么问题?我做错了什么?您调用的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
,并在回调完成后调用table.reloadData()
我希望这对你有帮助 对不起,我不明白。如果我再次调用SQLHandler.getActiveIDAmount,我是否不必像以前一样在{}之间输入相同的信息,从而无法解决问题?我做了一些测试,发现返回的numberOfRows实际上是0,它的默认值。可能还值得一提的是,我尝试使用此“完成处理程序”来修复异步数据库获取没有返回用于行的正确值的问题。您在问题中发布了“println(numberOfRows)//显示正确的(数据库)值”因此,这意味着您的数据库查询正在工作,但您没有正确使用数据集。您不必调用该方法两次,只需调用一次,然后使用检索到的数据集填充TableView,但这不是我正在做的吗?(顺便说一句,我更新了我的问题,因为返回的值似乎确实不正确)我正在获取所需的行数,只是没有更改numberOfRows(返回的)的值(numberOfRows=amountOfIDs.description.toInt()!)?我如何知道回调何时完成?@Tice您不需要知道回调何时完成,您只需从它内部调用update table即可。我更新了我的答案,也涵盖了这一点。
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.
}
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()
})
}