IBOutlet等于零
我只是尝试将我的UIWebView与UIViewController连接,当我启动应用程序时,我得到的错误意味着UIWebView等于nil。 可能有什么问题?
如果你刚刚引用了AuthViewController()
,你会看到这种行为,但根本没有引用故事板。 那是因为当你只是创建一个AuthViewController
的实例时,它无法知道故事板中与该类相关联的场景。 因此,所有IBOutlet
引用都将nil
。
相反,如果您以编程方式转换到此场景,则可以使用其“故事板ID”实例化视图控制器:
-
在Interface Builder的右侧面板的“Identity Inspector”中指定视图控制器场景的故事板ID:
-
一旦你这样做,而不是做以下的事情,这将无效:
let controller = AuthViewController() // now do something with `controller`, eg presentViewController(controller, animated: true, completion: nil)
您现在可以使用其故事板ID正确实例化此
AuthViewController
:let controller = storyboard?.instantiateViewControllerWithIdentifier("AuthScene") presentViewController(controller!, animated: true, completion: nil)
或者,如果你想在两个场景之间转换,我更喜欢使用故事板segues:
-
因此,通过控制 – 从原始场景上方的视图控制器图标拖拽到目标场景,在两个场景之间创建一个segue:
这会创建一个segue,它不会链接到任何按钮或类似的东西。 它只是直接在两个场景之间的一个segue,在你以编程方式执行之前不会被调用。
-
给那个segue自己的故事板ID:
-
现在,您可以以编程方式执行该segue:
performSegueWithIdentifier("TransitionToAuthScene", sender: self)
后一种方法的优点是(a)故事板现在可视地表示您的应用程序的流程; (b)你可以使用放松细分等。
–
最后一点想法:
-
如果您没有以编程方式过渡到此场景,另一种可能性是您没有在Interface Builder中连接
IBOutlet
。 鉴于“Auth Web View”标签显示在文档大纲中,我认为您已成功连接IBOutlet
,但这是另一件需要检查的事情。 您可以通过选择Web视图,然后查看Interface Builder右侧的“Connections Inspector”面板来确认: -
稍后您在评论中提到了在
viewDidLoad
执行此转换。 这总是从故事板转换到新场景的错误位置,因为您经常会在转换到相关场景的过程中,并且iOS会变得混乱。最好将这种代码推迟到
viewDidAppear
(或跳过“源”视图控制器并直接转换到此“auth”场景)。