2009-04-05 4 views
0

У меня есть подкласс UIViewController, который обращается к self.navigationController в viewDidLoad :. В зависимости от того, где он находится в стеке представлений, я либо получу навигационный контроллер, либо я получу нуль.Различные значения (nil и non-nil) для self.navigationController в зависимости от расположения стека

Если мой стек «RootViewController -> MyViewController», я получаю действительный указатель.

Если мой стек «RootViewController -> AnotherViewController -> MyViewController», я получаю нуль.

В обоих случаях MyViewController выталкивается в стек с:

[self.navigationController pushViewController:self.myViewController 
          animated:YES]; 

Это я застрял, потому что мне нужно, чтобы иметь возможность нажать другую ViewController на стеке выше MyViewController, который прекрасно работает в первый случай, но, очевидно, сбой второй.

ответ

0

Из всего, что я вижу, self.navigationController UIViewController предназначен для всегда возврата соответствующего UINavigationController до тех пор, пока UIViewController существует в стеке UINavigationController. Вероятно, это один из тех случаев, когда я, кажется, сталкиваюсь с собой чаще, чем мне хотелось бы, когда простая ошибка кодирования маскируется как нечто более сложное. В этих случаях мне обычно удаётся создать совершенно новый проект Xcode с минимальным кодом, необходимым для воспроизведения проблемы, и больше времени, чем нет, в этом процессе я нахожу исправление для чего-то, что я упускаю из виду, которое затем можно легко применить в основном проекте , Извините, я не могу предложить больше деталей, но то, что вы описываете, похоже, противоречит дизайну рамки Cocoa Touch, и если вы все еще можете воспроизвести его в минимальном проекте Xcode, написанном в строгом соответствии с документацией, это может быть хорошая идея, чтобы сообщить об ошибке с Apple. Надеюсь, хотя вы просто найдете что-то простое, вы упустили из виду и выгнали себя через несколько минут =)

+0

Это была по существу проблема. Овальный меч нильских проглатывающих сообщений, отправленных ему. :) Взяв пару выходных и вернувшись, удивительно полезно найти такие проблемы. –

0

Что я обычно делаю, это подкласс UIViewController и добавить метод для установки navigationController. Нет причин не иметь это как чтение/запись, особенно учитывая, как часто классы Apple решают не устанавливать navigationController (или parentController, если на то пошло), даже если они находятся в одном стеке.

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