我有一个符合自定义协议FoodItemProtocol
的表视图,它实现了它的功能:
func foodItemWasTaggedAsFavorite() {
tableView?.reloadData()
print("foodItemWasTaggedAsFavorite")
}
将foodItem
标记为收藏夹后,将调用此函数并执行print语句,但不会重新加载表视图。
我意识到我实际上并不需要使用委托,如果我在reloadData()
打电话给viewDidAppear()
,它就可以了。但我仍然想知道为什么它没有通过代表团工作?我甚至试图在主线程上调用reloadData()
,如下所示:
dispatch_async(dispatch_get_main_queue()) {
tableView?.reloadData()
}
但我得到了同样的结果。
答案 0 :(得分:1)
如果您从其他视图控制器调用委托方法,tableView
将为nil
。
要检查此项,请将foodItemWasTaggedAsFavorite
修改为:
if let tableView = tableView {
tableView.reloadData()
print("foodItemWasTaggedAsFavorite")
}
现在检查是否正在打印print语句。我很确定它不会,因为tableView
是nil
。
但是,在viewDidAppear:
中,表格视图已加载,因此不是nil
。
此外,如果表格视图不在屏幕上,则没有理由重新加载数据。