0
self.rootViewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
[self.window addSubview:self.rootViewController.view];    //App will not crash without this line

self.navigationController = [[UINavigationController alloc] initWithRootViewController: self.rootViewController];
[self.window addSubview:self.navigationController.view];

我在模拟器中运行它,它崩溃了,为什么?

错误信息:

Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', 
reason: 'adding a root view controller <RootViewController: 0x6871620> as a child of 
view controller:<UINavigationController: 0x6a86dc0>'

还是不知道

4

3 回答 3

0

您没有清楚地指定您的问题,所以请在控制台上添加错误消息。没有错误消息,我们无法判断问题发生在哪里。由于 nib 文件名,它如何崩溃,您将 nib 文件名指定为 nil。请指定 nib 文件名。试试这个代码一次。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        self.rootViewController = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];
        self.navigationController=[[UINavigationController alloc] initWithRootViewController:self.rootViewController];
        self.window.rootViewController = self.navigationController;
     //   [self.window addSubview:navigationController.view];
        [self.window makeKeyAndVisible];
        return YES;
    }

我希望这段代码能解决你的问题

于 2012-10-25T04:03:54.850 回答
0

你的逻辑是错误的。添加 rootViewController 或添加 navigationController 作为窗口的子视图。您不能同时添加两个视图控制器。在这里,您的 navigationController 将覆盖您的 rootviewcontroller。如果可能,然后将您的 rootviewcontroller 添加到 navigationController 或将 navigationController 添加到 rootviewcontroller

于 2012-10-25T04:15:07.260 回答
0

由于您将RootViewController笔尖名称设置为nil我希望您在RootViewController.m内部方法-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil或其他方式中管理您的视图。

要修复您给出的错误消息,请按照以下方式更改您发布的代码

self.rootViewController = [[RootViewController alloc] initWithNibName:nil bundle:nil];
self.navigationController = [[UINavigationController alloc] initWithRootViewController: self.rootViewController];
self.window.rootViewController = self.navigationController;
[self.window makeKeyAndVisible];
于 2012-10-25T04:43:53.233 回答