IBOutlet等于零

时间:2015-09-27 20:01:36

标签: ios swift uiwebview

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

Error in this image

1 个答案:

答案 0 :(得分:3)

如果你刚引用AuthViewController(),你会看到这种行为,但根本没有引用故事板。那是因为当你只是创建一个AuthViewController的实例时,它无法知道故事板中与该类相关联的场景。因此,所有IBOutlet引用都将为nil

相反,如果您以编程方式转换到此场景,则可以使用其“故事板ID”实例化视图控制器:

  1. 在Interface Builder右侧面板的“Identity Inspector”中指定视图控制器场景的故事板ID:

    enter image description here

  2. 一旦你这样做,而不是做以下的事情,这将无效:

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

    您现在可以使用其故事板ID正确实例化此AuthViewController

    let controller = storyboard?.instantiateViewControllerWithIdentifier("AuthScene")
    presentViewController(controller!, animated: true, completion: nil)
    
  3. 或者,如果你想在两个场景之间转换,我更喜欢使用故事板segues:

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

      enter image description here

      这会创建一个没有链接到任何按钮或类似东西的segue。它只是直接在两个场景之间的一个segue,在你以编程方式执行之前不会被调用。

    2. 为该segue提供自己的故事板ID:

      enter image description here

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

      performSegueWithIdentifier("TransitionToAuthScene", sender: self)
      
    4. 后一种方法的优点是(a)故事板现在可视化地表示您的应用程序的流程; (b)你可以使用展开赛段等。

      -

      最后一点想法:

      • 如果您没有以编程方式过渡到此场景,另一种可能性是您没有在Interface Builder中挂钩IBOutlet。鉴于“Auth Web View”标签显示在文档大纲中,我认为您已成功连接IBOutlet,但这是另一件需要检查的事情。您可以通过选择Web视图,然后查看Interface Builder右侧的“Connections Inspector”面板来确认这一点:

        enter image description here

      • 稍后您在评论中提到了在viewDidLoad中执行此转换。这总是从故事板转换到新场景的错误位置,因为您经常会在转换到相关场景的过程中,并且iOS会变得混乱。

        最好将此类代码推迟到viewDidAppear(或跳过“源”视图控制器并直接转换到此“auth”场景)。

相关问题