IBOutlets nil并在presentModalViewController之后查看未加载:animated:

时间:2010-11-16 18:34:10

标签: iphone cocoa-touch uikit uiviewcontroller nib

在iPad上,我正在使用-presentModalViewController:animated:显示一个viewController,然后该viewController也通过调用-presentModalViewController:animated:来显示第二个模态viewController。

问题是第二个viewController似乎没有加载它的NIB。查看调试器,所有UIView元素都设置为nil,并且-viewDidLoad不会被调用。

但是,如果我直接从第一个UIViewController转到第二个对话框,NIB会正确加载。根据Apple文档,应该可以推送多个UIViewControllers(请参阅-dismissModalViewControllerAnimated:对连续加载的多个模态UIViewControllers的讨论)。

下面是我调用第二个模态UIViewController的代码(第一个使用基本相同的代码调用)。 dialog.delegate基于Apple用于Utility 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 :(得分:0)

我弄清楚问题是什么......

第一个viewController正在显示一个文档类型窗口,并在其-viewDidLoad方法中告诉第二个对话框出现。因为他们都使用动画效果,他们踩着彼此的脚趾,第二个viewController永远不会正确加载。

答案是在初始化对话框之前使用-performSelector:withObject:afterDelay:延迟一秒。