【问题标题】:Adding an initializer to a view controller results in an outlet being nil in viewDidLoad向视图控制器添加初始化程序会导致 viewDidLoad 中的 outlet 为 nil
【发布时间】:2016-11-14 23:39:04
【问题描述】:

我有一个视图控制器如下:

   class TutorialPageViewController: UIViewController, UIPageViewControllerDelegate
    {
        @IBOutlet weak var pageControl: UIPageControl!
        var tutorialCategory    = TutorialCategory.enableShareContact

        override func viewDidLoad()
        {
            super.viewDidLoad()
            self.pageViewController.dataSource = self
            self.pageViewController.delegate = self
            pageControl.numberOfPages  = 5

   ...

这运行没有问题,但是在添加初始化程序后,pageControl 出口现在在 viewDidLoad 中为零,导致异常。这是添加的初始化程序:

init(tutorialCategory: TutorialCategory)
{
    super.init(nibName: nil, bundle: nil)
    self.tutorialCategory = tutorialCategory
}

convenience required init(coder aDecoder: NSCoder)
{
    self.init(tutorialCategory: TutorialCategory.enableShareContact)
} 

为什么添加初始化程序具有使 IBOutlet 现在变为 nil 的效果,我该如何解决?

(我尝试在 viewDidLoad 中添加对 VC 视图的调用以尝试强制加载插座,但没有效果)

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    因为插座是由super.init(coder aDecoder: NSCoder) 设置的,您不再调用它。

    你可能想要:

    required init(coder aDecoder: NSCoder) {
        self.tutorialCategory = .enableShareContact
        super.init(coder: aDecoder)
    }
    

    不要把它作为一个方便的初始化来覆盖它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-29
      • 2022-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多