I am unable to add init method to the following UIViewController class. I need to write some code in the init method. Do i have to write init(coder) method? Even when I add
All of these answers are half-answers. Some people are experiencing infinite loops in related posts because they are only adding the convenience init() (it recursively calls itself if you don't providing a distinct init() method for it to invoke), while other people are neglecting to extend the superclass. This format combines all the solutions to satisfy the problem completely.
// This allows you to initialise your custom UIViewController without a nib or bundle.
convenience init() {
self.init(nibName:nil, bundle:nil)
}
// This extends the superclass.
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
tap = UITapGestureRecognizer(target: self, action: Selector("handleTap:"))
}
// This is also necessary when extending the superclass.
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented") // or see Roman Sausarnes's answer
}
Edit: Also, if you want to initialise any class properties using parameters passed into your convenience init() method without all the overridden init() methods complaining, then you may set all those properties as implicitly unwrapped optionals, which is a pattern used by Apple themselves.