Различные значения (ноль и не ноль) для self.navigationController в зависимости от расположения в стеке - PullRequest
0 голосов
/ 06 апреля 2009

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

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

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

В обоих случаях MyViewController помещается в стек с помощью:

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

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

Ответы [ 2 ]

0 голосов
/ 19 августа 2010

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

0 голосов
/ 06 апреля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...