从collectionViewCell

时间:2017-01-31 16:23:16

标签: ios uitableview swift3 uicollectionviewcell tableviewcell

我在tableView中有一个collectionViewCell,当我尝试重新加载数据时出现错误。

*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3600.6.21/UITableView.m:1610

我尝试使用Dispatch.main.async,似乎摆脱了问题。唯一的事情是它不会重新加载数据,而tableView

中没有任何变化
func cleanItems(completion: @escaping (Bool) -> Void) {

    Dispatch.main.async {

        cell.tableView.beginUpdates()
        // Make changes in the Data Source
        cell.tableView.deleteRows(at: selectedItems, with: .fade)
        cell.tableView.endUpdates()

        // Reloading sections accordingly depending on what the user has deleted

        // Do I need to reload data here again? It used to work without Dispatch, but it wasn't stable
        cell.tableView.reloadData()


        // Updating items with if statements to reload data in Firebase

        completion(true)

    }
}

这根本不会重新加载数据,似乎没有任何改变。好处是我没有得到随机崩溃,这是在实施Dispatch.main.async

之前的情况

我已经检索了每个部分中的numberOfRows,以查看结束更新后有多少行。

print(cell.tableView.numberOfRows(inSection: 1))

我获得了当前视图中相同数量的行。

这一点至关重要,因为如果tableView部分全部为零,则collectionViewCell应该会消失。我们永远不会进入completion区块,因为它表示numberOfRows从未改变过。让我们留下未更新的tableView

1 个答案:

答案 0 :(得分:0)

我通过在函数调用之外移动Dispatch.main.async解决了这个问题。

Dispatch.main.async {

    cleanItems(completion: { (success) in 


    etc.


    })

}