Ios UITableView未显示正确的行数

Ios UITableView未显示正确的行数,ios,swift,uitableview,Ios,Swift,Uitableview,我已经在视图控制器中创建了一个表视图,并且正在尝试设置它将拥有的行数。该金额从数据库返回,然后传递到正确的方法(请参见下文)。问题是可见行的数量与从数据库返回的数量不同 在.viewDidLoad()中 应该“设置”表视图的方法 尽管我从数据库中获得了值,但我总是以6作为结束,而不是获得所需的行数(4)?正在运行的表视图的屏幕截图: 有什么问题?我做错了什么?您调用的SQLHandler方法是一个完成处理程序,这意味着swift将继续执行您的代码,并在(返回numberOfRowns=0)之后(

我已经在视图控制器中创建了一个表视图,并且正在尝试设置它将拥有的行数。该金额从数据库返回,然后传递到正确的方法(请参见下文)。问题是可见行的数量与从数据库返回的数量不同

在.viewDidLoad()中

应该“设置”表视图的方法

尽管我从数据库中获得了值,但我总是以6作为结束,而不是获得所需的行数(4)?正在运行的表视图的屏幕截图:


有什么问题?我做错了什么?

您调用的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()
            })
}