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…)中有断点,视图控制器怎么样(调用委托方法的一个)正在显示(模式、推送等)?显示(例如推送)嵌入在导航控制器中,导航控制器嵌入在选项卡栏控制器中,委托视图控制器作为第二个选项卡栏项位于该选项卡栏控制器中。