IBOutlets nil и представление не загружается после presentModalViewController: animated: - PullRequest
0 голосов
/ 16 ноября 2010

На iPad я отображаю viewController, используя -presentModalViewController:animated:, а затем этот viewController отображает второй модальный viewController, также вызывая -presentModalViewController:animated:.

Проблема в том, что второй viewController не загружает свой NIB.Глядя в отладчик, все элементы UIView установлены в nil, и -viewDidLoad не вызывается.

Однако, если я перейду непосредственно ко второму диалогу из первого UIViewController, NIB загружается правильно,В соответствии с документацией Apple, толкание нескольких загруженных UIViewController должно быть возможным (см. Обсуждение -dismissModalViewControllerAnimated: для нескольких модальных UIViewController, загруженных последовательно).

Ниже приведен мой код для вызова второго модального UIViewController (первый называетсяиспользуя по существу тот же код).dialog.delegate основан на том же коде, который Apple использует для примера кода служебной программы flipSideController, и используется только для уведомления родителя о том, что диалоговое окно готово к закрытию.

- (void) displayNewGameDialog {
    NewGameDialog * dialog;

    if (iPadDevice) {
        dialog = [[NewGameDialog alloc] initWithNibName:@"NewGameDialog-iPad" 
                                                 bundle:nil];
        dialog.modalPresentationStyle = UIModalPresentationFormSheet;
    } else {
        dialog = [[NewGameDialog alloc] initWithNibName:@"NewGameDialog" 
                                                 bundle:nil];
    }

    dialog.delegate                 = self;
    dialog.modalTransitionStyle     = UIModalTransitionStyleCrossDissolve;
    dialog.player                   = self.player;

    [self presentModalViewController:dialog animated:YES];
    [dialog autorelease];
}

1 Ответ

0 голосов
/ 19 ноября 2010

Я выяснил, в чем проблема ...

Первый viewController отображает окно типа документа, и в его методе -viewDidLoad я говорил, чтобы появилось второе диалоговое окно.Поскольку оба они использовали анимационные эффекты, они наступали друг другу на пальцы ног, а второй viewController никогда не загружался должным образом.

Ответ заключался в задержке на одну секунду с использованием -performSelector:withObject:afterDelay: до инициализации диалогового окна.

...