向视图控制器添加初始化程序会导致 viewDidLoad 中的 outlet 为 nil
Posted
技术标签:
【中文标题】向视图控制器添加初始化程序会导致 viewDidLoad 中的 outlet 为 nil【英文标题】:Adding an initializer to a view controller results in an outlet being nil in viewDidLoad 【发布时间】: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 视图的调用以尝试强制加载插座,但没有效果)
【问题讨论】:
【参考方案1】:因为插座是由super.init(coder aDecoder: NSCoder)
设置的,您不再调用它。
你可能想要:
required init(coder aDecoder: NSCoder)
self.tutorialCategory = .enableShareContact
super.init(coder: aDecoder)
不要把它作为一个方便的初始化来覆盖它。
【讨论】:
以上是关于向视图控制器添加初始化程序会导致 viewDidLoad 中的 outlet 为 nil的主要内容,如果未能解决你的问题,请参考以下文章
向 models.py 添加一个类会导致“视图不存在”错误吗?
向 UITableViewController 添加顶部/底部视图?