UITableView没有显示正确的行数

时间:2015-06-10 22:39:38

标签: ios swift uitableview

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

在.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

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

1 个答案:

答案 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()

我希望能帮到你!