Assigning splitviewControllers delegate in awakeFromNib instead of viewDidLoad fixes the problem with viewWillAppear sometimes not getting called.