Ios 通过委托调用重载数据
我有一个符合自定义协议Ios 通过委托调用重载数据,ios,swift,uitableview,delegates,Ios,Swift,Uitableview,Delegates,我有一个符合自定义协议FoodItemProtocol的表视图,它实现了它的功能: func foodItemWasTaggedAsFavorite() { tableView?.reloadData() print("foodItemWasTaggedAsFavorite") } 将foodItem标记为收藏夹后,将调用此函数并执行print语句,但永远不会重新加载表视图 我意识到我实际上不需要为此使用委托,如果我在viewdideappease()中调用reloadData
FoodItemProtocol
的表视图,它实现了它的功能:
func foodItemWasTaggedAsFavorite() {
tableView?.reloadData()
print("foodItemWasTaggedAsFavorite")
}
将foodItem
标记为收藏夹后,将调用此函数并执行print语句,但永远不会重新加载表视图
我意识到我实际上不需要为此使用委托,如果我在viewdideappease()
中调用reloadData()
,它可以正常工作。但我还是想知道为什么它不能通过授权工作?我甚至尝试在主线程上调用reloadData()
,如下所示:
dispatch_async(dispatch_get_main_queue()) {
tableView?.reloadData()
}
但我得到了同样的结果 如果从其他视图控制器调用委托方法,
tableView
将为nil
要检查此项,请将foodItemWasTaggedAsFavorite
修改为:
if let tableView = tableView {
tableView.reloadData()
print("foodItemWasTaggedAsFavorite")
}
现在检查打印语句是否正在打印。我很确定它不会,因为tableView
是nil
但是,在viewdide:
中,表视图已经加载,因此它不是nil
另外,如果表视图不在屏幕上,也没有理由重新加载数据。您在哪里调用
foodItemWasTaggedAsFavorite
?在不同的视图控制器中,很抱歉忘记了提到这一点。如果您在不同的视图控制器中,为什么需要重新加载表视图?正如我所写的,我意识到我不需要它,但是我之前试过了,现在我很好奇为什么它不起作用。请看下面的答案。我试过了你的修改,打印语句实际上被执行了。@AdamBardon你如何确定表视图是否被重新加载?在表视图(…cellforrowatinexpath…)中有断点,视图控制器怎么样(调用委托方法的一个)正在显示(模式、推送等)?显示(例如推送)嵌入在导航控制器中,导航控制器嵌入在选项卡栏控制器中,委托视图控制器作为第二个选项卡栏项位于该选项卡栏控制器中。