通过委托调用reloadData

时间:2016-02-17 21:03:04

标签: ios swift uitableview delegates

我有一个符合自定义协议FoodItemProtocol的表视图,它实现了它的功能:

func foodItemWasTaggedAsFavorite() {
    tableView?.reloadData()
    print("foodItemWasTaggedAsFavorite")
}

foodItem标记为收藏夹后,将调用此函数并执行print语句,但不会重新加载表视图。

我意识到我实际上并不需要使用委托,如果我在reloadData()打电话给viewDidAppear(),它就可以了。但我仍然想知道为什么它没有通过代表团工作?我甚至试图在主线程上调用reloadData(),如下所示:

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

但我得到了同样的结果。

1 个答案:

答案 0 :(得分:1)

如果您从其他视图控制器调用委托方法,tableView将为nil

要检查此项,请将foodItemWasTaggedAsFavorite修改为:

if let tableView = tableView {
    tableView.reloadData()
    print("foodItemWasTaggedAsFavorite")
}

现在检查是否正在打印print语句。我很确定它不会,因为tableViewnil

但是,在viewDidAppear:中,表格视图已加载,因此不是nil

此外,如果表格视图不在屏幕上,则没有理由重新加载数据。