当我将新视图控制器推送到self.navigation控制器时,应用程序崩溃了

时间:2011-12-30 14:58:35

标签: iphone objective-c ios uinavigationcontroller pushviewcontroller

我有一个iOS 5应用程序。 当我想将视图推送到导航控制器时,应用程序崩溃:(

这是我的appDelegate部分:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.


    self.navigationController=[[UINavigationController alloc] init];

    StartViewController *startViewController=[[StartViewController alloc] init];
    [self.navigationController pushViewController:startViewController animated:YES];
    [self.navigationController setNavigationBarHidden:YES];
    [[UIApplication sharedApplication] setStatusBarHidden:YES];

    self.window.backgroundColor = [UIColor whiteColor];
    self.window.rootViewController=self.navigationController;
    [self.window makeKeyAndVisible];
    return YES;
}

这是我推送的新视图控制器方法:

-(IBAction)startPressed:(id)sender
{
    NSLog(@"startPressed: called");
    //loading RootViewController (mainscreen view)
    RootViewController *rootViewController=[[RootViewController alloc] init];
    [self.navigationController pushViewController:rootViewController animated:YES];
}

应用程序在字符串[self.navigationController pushViewController:rootViewController animated:YES];

处崩溃

请帮帮我。如何解决这个问题?

5 个答案:

答案 0 :(得分:4)

UINavigationController需要rootviewController:

StartViewController *startViewController=[[StartViewController alloc] init];
self.navigationController=[[UINavigationController alloc] initWithRootViewControllr:startViewController];

[self.navigationController setNavigationBarHidden:YES];
[[UIApplication sharedApplication] setStatusBarHidden:YES];

<击>

<击>

更改

@autoreleasepool { 
     return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
}

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
[pool release];

return retVal;

<击>

答案 1 :(得分:3)

解决了这个问题。我改变了`[self.navigationController pushViewController:vc animated:NO]并且debug给了我一个警告,即没有设置视图插座。所以我从界面构建器连接视图,问题就消失了。谢谢大家的帮助

答案 2 :(得分:1)

处理UINavigationController是一种奇怪的方式。在你的情况下,我想知道如果你改变它是否有效

self.navigationController=[[UINavigationController alloc] init];

StartViewController *startViewController=[[StartViewController alloc] init];
[self.navigationController pushViewController:startViewController animated:YES];

StartViewController *startViewController=[[StartViewController alloc] init];
self.navigationController=[[UINavigationController alloc] initWithRootViewController:startViewController];

如果您的应用仍然崩溃,那么知道您是否覆盖-loadView类的StartViewController方法会很有趣,因为您没有使用– initWithNibName:bundle:初始化它

答案 3 :(得分:1)

我对pushViewController有同样的问题,但是当我尝试这样的事情时

UINavigationController *rootViewController = (UINavigationController *)[[[UIApplication sharedApplication] keyWindow] rootViewController];
NSLog(@"NavControler:%@, %@", self.navigationController, rootViewController);

我得到了同样的观点,NSArray有1个项目。 问题出在其他地方。

如果有人可以提供帮助并添加一些可用于pushViewController的代码,因为我有正确的NavigationController但是当我尝试推送ViewControler时我得到错误

  ViewController* NextView = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
UINavigationController *rootViewController = (UINavigationController *)[[[UIApplication sharedApplication] keyWindow] rootViewController];
[rootViewController pushViewController:NextView animated:YES];

请有人为我解释这个问题。

答案 4 :(得分:0)

我对pushViewController也有一些问题。我检查了所有目标成员资格,并获得我的xib文件未添加到必要的目标。这对我有帮助。 我想你也应该检查你的xib文件。