2009-05-21 5 views
7

UpdateviewDidLoad вызывается, viewWillAppear не дозвонились, вид не отображается на экране

уже было сказано, что viewWillAppear и viewDidAppear не дозвонились согласно документации. Однако я не выполняю инициализацию внутри этих методов и не добавляю элементы UI в представление.

Я просто использовал их, чтобы разместить точки останова, чтобы попытаться отладить это.

Любые другие идеи?


Оригинал Вопрос

Я в тупик. Я пересматриваю код и сталкиваюсь с каким-то странным поведением ....

Я инициализирую viewController A без наконечника и программным способом.

viewDidLoad в контроллере A вызывается.

Внутри viewDidLoad of viewController A, я инициализирую viewController B из наконечника.

добавить viewControllerB.view как подвид из viewControllerA.view

viewDidload контроллера B вызывается.


Тогда это становится странно:

  1. viewWillAppear и viewDidAppear из ViewController B никогда дозвонились .

  2. viewControllerB.view never it on screen.

  3. No ошибки.


Вещи, которые я проверил:

Имя viewControllerBs СИБ является правильным.

Вид на ViewControllerB подключен к виду.

viewControllerB и его вид оба не нуль.

И в довершение всего, все отлично работает в SDK [redacted] beta 5!

Любые идеи? Это должно быть что-то глупое.

+0

Так что это работает на sdk3, но не на более ранних? – EightyEight

+0

См. Ответ Рэмина о тайне зренияWillAppear. Это в документах, но его найти нелегко. Не уверен, почему viewControllerB никогда не выводит его на экран. Вы делаете какую-либо важную инициализацию в viewWillApeear? – amattn

+0

+1 для проверки списка вопросов перед заданием здесь – stefanB

ответ

0

Чтобы закрыть этот вопрос:

Я никогда не мог найти решение, но с тех пор SDK 3.0 является стандартным и точка становится спорным. Код корректно работает в текущих версиях SDK.

19

Если контроллер вида добавлен в иерархию представлений через код, контроллер вида не получит сообщений (или viewDidAppear).Если вы добавите его самостоятельно, вы должны сами отправить сообщение диспетчеру просмотра.

+2

спасибо, что помогает мне понять, почему viewWillAppears/didAppears не вызываются. Тем не менее, проблема сохраняется –

1

Попробуйте

-(void) viewDidAppear:(BOOL)animated { 
// whatever 
} 
+0

это вызвано после загрузки изображения. –

3

Не забудьте позвонить

[super viewWillAppear:animated]; 

Где бы вы ни переопределение.

В документации сказано:

Если переопределить этот метод, вы должны вызвать супер в какой-то момент в вашей реализации.

+0

Я использую раскадровку с навигационными контроллерами/viewcontrollers, и viewDidAppear не вызывался ... причина в том, что я прокомментировал [super viewDidAppear: animated] from мой пользовательский подкласс, из которого унаследовал один из моих контроллеров viewControllers. Doh! Понятия не имею, почему я изначально сделал это (я думаю, чтобы решить условие гонки). Разочарование этого устраняет проблему! Спасибо за напоминание! – taber

0

Я думаю, что ваш взгляд не является корневым. Вы, вероятно, с помощью UINavigationController так попытаться реализовать этот метод

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated 

или это один

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 

и добавьте в ваш viewDidLoad

this.navController.delegate = self; 

(не забудьте добавить UINavigationControllerDelegate протокол в вашем файле .h.