【问题标题】:Properties return nil when a UIViewController is not being presented未呈现 UIViewController 时属性返回 nil
【发布时间】:2016-04-01 23:45:50
【问题描述】:

如果ViewController1 没有出现,但ViewController2 是:我可以轻松地从ViewController2 更新ViewController1 中的GUI,但在出现ViewController2 时我无法检索ViewController1 中的任何值。当ViewController1 没有被显示时,它总是将属性返回为 nil。

在我的例子中,每个视图控制器都显示在标签栏视图控制器上。

解决这个问题的最佳方法是什么?谢谢。

【问题讨论】:

  • vc1和vc2是什么关系。你的问题有点不清楚。
  • 查看你设置的引用链,viewcontroller1即使在vewcontroller2下也可以更新
  • @LucasHuang 更多的一般问题,但每个视图控制器都在标签栏视图控制器上。当一个被提出时,另一个被解雇。被解除的视图控制器在解除时为其属性返回 null。
  • @JasonNam 我知道我可以从另一个更新一个视图控制器,这不是问题所在。问题是从当前未呈现的视图控制器获取属性的值。除非出现,否则返回 nil。
  • 您是如何实例化您的视图控制器、从情节提要中分离或以编程方式从 nib 文件创建的?

标签: ios objective-c viewcontroller


【解决方案1】:

您指定的 nib 文件不会立即加载。它加载了 第一次访问视图控制器的视图。如果你想 在加载 nib 文件后执行额外的初始化, 覆盖 viewDidLoad 方法并在那里执行您的任务。

这是来自关于initWithNibName指定初始化器的文档:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/occ/instm/UIViewController/initWithNibName:bundle:

编辑基于来自的评论:

如果您使用UITabBarController,它具有viewControllers 属性,因此您的视图控制器的所有保留计数不会减少到尚未释放的0。如果你发现任何东西nil,那么它应该是你的初始化程序中的一些问题。 https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITabBarController_Class/#//apple_ref/occ/instp/UITabBarController/viewControllers

您不应该有自己的机制来访问视图控制器。相反,请使用 UITabBarController 中的 viewControllers 属性,因为它有助于管理有效的视图控制器。

【讨论】:

  • 我知道,但是视图已经被访问过并且 viewDidLoad 已经被执行了。
  • 原来我的类方法返回视图控制器的实例是 nil 但是当我使用标签栏视图控制器来获取它时它工作正常,因为它继续存储该实例。谢谢!
  • 看我的最后一段,你应该使用UITabBarController 来管理你的有效视图控制器。如果你需要使用你的,你必须非常小心如何让它在你的机制和UITabBarController中并行。
猜你喜欢
  • 2014-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多