2013-06-09 2 views
0

У меня есть универсальное приложение iOS, которое использует стандарт UISplitViewController.Почему self.splitViewController неожиданно отсутствует в viewDidLoad?

Почти так как я начал работать на приложении, которое я имел следующий код в месте, чтобы связать контроллер мастер вида слева с контроллером представления детали справа:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.detailViewController = (CustomViewController *)[[self.splitViewController.viewControllers lastObject] topViewController]; 
} 

После некоторых последних изменений, которые последние линия перестала работать и, таким образом, нарушила некоторые функции. Причиной такого поведения является то, что self.splitViewController - nil. Перемещение последней строки на viewWillAppear: устраняет проблему, но ИМХО это не совсем правильно.

Изменения, которые я сделал, на самом деле не связаны с этим, я не вносил изменений в иерархию контроллера или используемую раскадровку. Поэтому я не могу объяснить, откуда это происходит. Любой намек был бы оценен.

ответ

1

Вы можете создать динамический аксессуар для вашего экземпляра splitViewController, чтобы он никогда не возвращал нуль или, конечно же, проверял, нет ли в viewDidLoad.

например.

- (CustomViewController *)splitViewController 
{ 
    if (splitViewController == nil) { 
     splitViewController = [[CustomViewController alloc] init]; 
    } 
    return splitViewController; 
} 
+0

Проверка '' nil' в viewDidLoad' не помогает, а также инициализация контроллера вручную, это не то, что мне нужно заботиться о том, когда с помощью раскадровки. Однако я мог бы просто вызвать '[[self.splitViewController.viewControllers lastObject] topViewController]' в getter. – Koraktor

Смежные вопросы