gpt4 book ai didi

ios - IBOutlet 等于 nil

转载 作者:可可西里 更新时间:2023-11-01 01:04:07 28 4
gpt4 key购买 nike

我刚刚尝试将我的 UIWebView 与 UIViewController 连接起来,当我启动应用程序时出现错误,这意味着 UIWebView 等于 nil。可能是什么问题?

Error in this image

最佳答案

如果您只是引用了 AuthViewController(),但根本没有引用 Storyboard,您就会看到这种行为。这是因为当您简单地创建一个 AuthViewController 的实例时,它无法知道该类与 Storyboard 中的哪个场景相关联。因此,所有 IBOutlet 引用都将为 nil

相反,如果您以编程方式过渡到这个场景,您可以使用它的“ Storyboard ID”实例化 View Controller :

  1. 在 Interface Builder 右侧面板的“Identity Inspector”中指定 View Controller 场景的 Storyboard ID:

    enter image description here

  2. 一旦你这样做了,而不是像下面那样做,这是行不通的:

    let controller = AuthViewController()
    // now do something with `controller`, e.g.
    presentViewController(controller, animated: true, completion: nil)

    您现在可以使用 Storyboard ID 正确实例化此 AuthViewController:

    let controller = storyboard?.instantiateViewControllerWithIdentifier("AuthScene")
    presentViewController(controller!, animated: true, completion: nil)

或者,如果你想在两个场景之间转换,我更喜欢使用 Storyboard segues:

  1. 因此,通过 control 从原始场景上方的 View Controller 图标拖动到目标场景,在两个场景之间创建一个 segue:

    enter image description here

    这会创建一个未链接到任何按钮或类似内容的转场。它只是两个场景之间的直接转场,除非您以编程方式调用,否则不会被调用。

  2. 为 segue 提供自己的 Storyboard ID:

    enter image description here

  3. 现在您可以以编程方式执行该 segue:

    performSegueWithIdentifier("TransitionToAuthScene", sender: self)

后一种方法的优势在于:(a) Storyboard现在可以直观地表示您的应用程序流程; (b) 您可以使用 unwind segues 等。

--

一些最后的想法:

  • 如果您没有以编程方式转换到这个场景,另一种可能是您没有在 Interface Builder 中连接 IBOutlet。鉴于“Auth Web View”标 checkout 现在文档大纲中,我认为您确实成功连接了 IBOutlet,但这是另一回事要检查。您可以通过选择 Web View 然后查看 Interface Builder 右侧的“Connections Inspector”面板来确认这一点:

    enter image description here

  • 稍后在评论中您提到了在 viewDidLoad 中执行此转换。从你的 Storyboard过渡到新场景总是错误的地方,因为你经常会在过渡到有问题的场景的中间,而 iOS 会变得困惑。

    最好将此类代码推迟到 viewDidAppear(或跳过“源” View Controller 并直接过渡到此“auth”场景)。

关于ios - IBOutlet 等于 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32812264/

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