我有一个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];
请帮帮我。如何解决这个问题?
答案 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文件。