【问题标题】:How to wait for a UIViewController to be completely initialized?如何等待 UIViewController 完全初始化?
【发布时间】:2014-12-28 07:35:40
【问题描述】:

我有一个自定义的 segue 类型(重写 init 并执行 UIStoryboardSegue 的方法),并在 init 方法中实例化目标视图控制器(VC)。在源 VC 的 prepareForSegue 方法中,我调用了目标 VC 的一个方法,该方法试图重新加载目标 VC 的 tableView。问题是表视图并不总是被初始化,当我调用表视图的 reloaddata 时,我有时会得到一个 nil 取消引用错误。 问题是我怎样才能等到 VC 完全初始化并且不会收到此错误? 我正在使用 swift,如果您为 swift 的答案编写任何示例代码,我将不胜感激。

【问题讨论】:

  • 您应该让目标视图控制器执行此操作。将该逻辑移动到目标视图控制器的 viewDidLoad 方法

标签: ios swift uistoryboardsegue viewdidload


【解决方案1】:

只需调用 viewController 的视图以强制其加载。

[viewController view]; //will force a loadView if necessary
///then do what you're trying to do..

【讨论】:

  • 在 swift 中需要一个命令,比如 let x = viewController.view
  • 或 let _ = viewController.view 小心你没有使用它
  • 不管怎样,你只是在调用 getter
【解决方案2】:

我认为在这种情况下最好的方法是在目标 VC 中添加一个标志属性,例如:

var forceReload: Bool

您在源 VC 中从 prepareForSegue 设置。这样,您可以通过简单地检查该标志的值来选择从目标 VC 实际执行数据重新加载的位置(例如,在viewDidLoad 或viewWillAppear) - 当然,如果该标志为真,则不要记得重置它。

如果您还需要将数据从源传递到目标 VC,请使用在目标中声明并从源设置的一个或多个属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    • 2020-11-01
    • 2017-11-12
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多