【发布时间】:2020-10-21 05:02:36
【问题描述】:
我正在开发一个 iOS 应用程序。
有一个 viewController A 以编程方式对细节 viewController D 执行 segue。
在该详细视图控制器 D 上,用户可能会更改一些信息,当单击返回按钮到视图控制器 A 时应更新这些信息。
在 viewController A 我已经包含了这个功能:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
determineMyCurrentLocation()
print("reloading data")
downloadJSONFavoritos {
print("reloading viewwillappear")
self.collectionViewFavoritos.reloadData()
}
}
我的问题是,当返回 viewController A 时,并不总是调用这个函数,然后 A 中的信息没有按应有的更新。
【问题讨论】:
-
您可以拥有
closure,当用户对viewController D执行操作时,closure将触发您的更新逻辑 -
@vpoltave,请告诉我你告诉我的闭包是什么
-
您误解了 viewController 的生命周期。
ViewWillAppear在创建和显示“A”时被调用。当您转到“D”时,“A”不会被破坏,因此不会再次调用该方法。这不是将数据传回 viewController 的方式。 -
如果视图控制器将视图控制器 D 呈现为全屏模式或将其推送到导航堆栈上,则当视图控制器 D 关闭时,应调用视图控制器 A 的
viewWillAppear(_:)。也就是说,这不是传回信息的好方法。您应该使用委托设计模式,或者将闭包传递给视图控制器 D,当新数据可用时它将调用该闭包。在 viewWillAppear 中盲目触发 JSON 的下载并不是一个好办法。