3

我使用下面的代码来初始化根视图控制器

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 

{

[window addSubview:rootViewController.view];
UINavigationController *nav=[[UINavigationController alloc]initWithRootViewController: rootViewController  ];
}

它在 ios 4 上运行良好大约 2 年,ios5 1 年,开始运行应用程序时没有任何问题,但在 ios6 上它崩溃并报告

*由于未捕获的异常“UIViewControllerHierarchyInconsistency”而终止应用程序,原因:“添加根视图控制器作为视图控制器的子级:”

欢迎任何评论

4

2 回答 2

5

'rootViewController' 已经在您的视图层次结构中。首先(window.rootViewController = nil)从它在(window.rootViewController?)中的任何其他容器中删除它。

于 2012-09-27T11:36:21.073 回答
2

在您的代码中,您将 rootViewController 的视图添加到窗口,然后立即尝试将 rootViewController 的视图添加到新的 UINavigationController。而是试试这个:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    ...    

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:rootViewController];
    [window addSubview:nav.view];

    ...
}

甚至更好:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    ...    

    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:rootViewController];
    window.rootViewController = nav;

    ...
}

... 是为了表明这些是不完整的例子-application:didFinishLaunchingWithOptions:。您需要确保已包括创建 UIWindow 并调用-makeKeyAndVisible它。

于 2012-09-27T12:02:29.103 回答