UITableView - cellForRowAtIndexPath延迟渲染

时间:2014-10-13 18:08:41

标签: ios objective-c uitableview swift

我有一个UITableView,它的单元格可能会根据每个单元格上显示的数据而有所不同,所以我有两个可重复使用的单元格,UIPendingXOCellUIXOCell。在某些时候,每UIPendingXOCell成为UIXOCell

请参阅下面的代码了解一些背景信息:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        var xoItem = self.xoForIndexPath(indexPath)
        var xoItemPFObject = xoItem.pfObject

        // If it's a pending XO
        if xoItemPFObject.objectId == nil {
            var cellIdentifier = "cell-pending-xo-list"
            var cell: UIPendingXOCell! = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as UIPendingXOCell!

            ...

            return cell
        }
        else {
            var cellIdentifier = "cell-xo-list"
            var cell: UIXOCell! = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as UIXOCell!

            ...

            return cell
        }
    }

示例:我有一个包含5个对象的列表,在调用.reloadData()时生成1 UIPendingXOCell和4 UIXOCell(一切正常)。我还在后台运行了一个动作,它改变了对象的方式,当我再次呼叫.reloadData()时,它们都变为UIXOCell(再次正常,cellForRowAtIndexPath被调用并且掉落进入else区块)。

我的问题是,调用cellForRowAtIndexPath后大约需要10秒才能将单元格渲染为UIXOCell而不是UIPendingXOCell

以前有人有这个问题吗?如果是这样,我该如何解决?

谢谢!

1 个答案:

答案 0 :(得分:10)

听起来好像你没有从主线程(UI线程)调用reloadData。确保从主线程更新UI。

dispatch_async(dispatch_get_main_queue()) { 
    tableView.reloadData()
}