【问题标题】:View is null in viewDidLoadviewDidLoad 中的视图为空
【发布时间】:2011-11-08 03:11:51
【问题描述】:

我创建了UITabBarController,每个选项卡都包含UINavigationController,并在此UINavigationController 中设置rootviewcontroller,所有这些都在界面生成器中完成。在 viewDidLoad 我尝试从视图中获取帧大小,但是当我引用视图时它返回 null。以前有没有人经历过这种情况。

所有 IBoutlet 均已正确连接。

【问题讨论】:

    标签: view nib


    【解决方案1】:

    viewDidLoad 如果视图已连接到您的 .xib,则返回 nil 视图可能意味着:

    对于编程初始化(自定义控制器):

    • 您完全忘记在视图控制器类上调用 initWithNibName:bundle:(您可能已经调用了 init 或其他名称)。
    • 您已经在视图控制器类中覆盖了 loadView 方法,但它没有设置 view

    对于所有控制器:

    • 出口连接不正确。
    • 您在显示之前不小心释放了视图或视图控制器。
    • 初始化视图时未正确指定 nibName 参数(找不到 nib 或找到没有视图的 nib。虽然这也应该引发异常)。
    • 没有足够的内存来分配view(不过,应用很可能已经被终止了)。

    我建议您尝试在 viewWillAppear: 中进行帧大小计算,然后查看此时 view 是否仍为 nil

    【讨论】:

    • 我没有调用任何init,因为我正在使用界面生成器,并且没有覆盖loadView。我尝试在 viewDidLoad 中调用视图,视图就在那里。我怎么不能在 viewDidLoad 中引用它,我想我没有错过你为我指出的所有列表。
    • 请尝试在viewWillAppear 中进行计算。如果这不起作用,请尝试viewDidAppear。如果viewDidAppear 不能正常工作,您可能没有正确访问frame(它在屏幕上绘制时必须有frame)。
    • 是的,我可以在 viewDidAppear 中引用视图,但我想设置一次视图,而不是每次视图出现时。只是想知道为什么 viewDidLoad 中的视图为空。
    • 您可以测试视图是否已设置,如果尚未运行,则仅运行您的定位代码。如果它只是定位,请尝试将 BOOL 添加到您的控制器类,仅在它为 NO 时运行代码块,并在代码运行时将其设置为 YES。否则,请检查您的视图是否处于初始状态而不是设置状态。
    • 无意冒犯,但这个答案没有帮助而且不完整。像 sarunw 一样,我有必须访问子视图对象的初始化,并且必须在 ViewDidLoad 中这样做,而不是在它出现时这样做。另外,“插座连接不正确”是什么意思?以及如何检查“nibName 参数未[或]正确指定”?问题是所有故事板制作的视图/子视图在ViewDidLoad 中都是空的,它们不应该是。我们如何解决这个问题?
    猜你喜欢
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 2011-01-11
    • 1970-01-01
    相关资源
    最近更新 更多