gpt4 book ai didi

ios - 正在调用我的委托(delegate)函数,但我的 UI 仍然没有相应更新

转载 作者:行者123 更新时间:2023-12-01 18:36:00 25 4
gpt4 key购买 nike

我的委托(delegate)模式有效(如果我的委托(delegate)函数只需要打印有关传回数据的语句)(编程布局,没有 IB segues)。但是接收器类不会相应地更新其 UI。这——我相信——结束了这个案例,即我的委托(delegate)模式是错误的。
我的 UI 怎么可能没有更新?什么情况下通常会阻止这种情况?我在这里处理手动输入,没有网络调用,没有大量数据或类似的东西。
例如我的委托(delegate)功能是:

class DetailTableViewController: AddVCDelegate {

//delegate function of AddVCDelgate protocol

func didAddLesson(lesson: Lesson) { // my addVC is calling this through delegate
self.lesson = lesson
print("delegate function set navitem title: \(lesson.name!)")//printed out correctly
self.navigationItem.title = lesson.name! //nothing changes
self.tableView.reloadData()// no reload
}

/*Here lesson.name got printed out nicely, navigationItem title does not change accordingly , tableView does not reload data.*/

回到 AddVC ViewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
let vc = DetailTableViewController()
self.delegate = vc //etc..}

AddVC 使用这个函数:
   func passLesson() {
if let lesson = lesson,
let delegate = self.delegate {
delegate.didAddLesson(lesson: lesson)
}
}

我只是发布了这个小片段,因为现在项目有点太复杂,无法复制到这里,但我相信这是问题代码的相关部分。如果需要,我可以更新更多细节。提前致谢!

更新:我已经将一个简单的演示项目上传到 GitHub,它正在重现问题,我希望它有助于了解问题的真正原因。我仍然绝望地寻找,我在这里做错了什么。

github.com/gerkov77/DataPassing/tree/master

最佳答案

您正在创建 DetailTableViewController() 的新实例并将其分配给委托(delegate)对象。您没有调用 View 层次结构中存在的 DetailTableViewController,而是调用一个新的。

您需要将委托(delegate)分配给您已经存在的 View Controller 。

澄清:

您显示的是 DetailTableViewController在屏幕中。这就是您在调用委托(delegate)时要更新的 View 。我们称之为 View A .

当您分配委托(delegate)时,您将实例化一个新的 DetailTableViewController ,即 不是 View A ,而是一个您没有向用户显示的新对象。我们称之为 View B .

当你执行函数 passLesson() ,您正在调用方法 didAddLesson()View B ,不会向用户显示。

你不应该创建新的 View B ,您需要使用 View A在你的委托(delegate)中。如何?好吧,您需要以某种方式提供 View A给您的AddVC类并将其用于您的委托(delegate)。

TLDR:行 let vc = DetailTableViewController()是错的。不要实例化一个新的 Controller ,使用你现有的。

关于ios - 正在调用我的委托(delegate)函数,但我的 UI 仍然没有相应更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59031402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com