2013-02-24 98 views
0

我想加载一个UIViewController在同一个故事板上,我已经给视图控制器一个故事板ID,恢复ID(与故事板ID相同)和视图控制器标题的'细分'。加载一个UIViewController在同一个故事板

我必须注册为getStarted的诉讼中,我运行下面的代码,我也导入我想视图控制器中加载使用入门按钮

#import "BreakdownViewController.h" 

'

视图控制器
- (IBAction)getStarted:(id)sender { 
    NSLog(@"Yes"); 
    BreakdownViewController *controller = [[BreakdownViewController alloc] initWithNibName:@"breakdown" bundle:nil]; 
    [self.navigationController pushViewController:controller animated:YES]; 
} 

是注销,但视图控制器不加载。

任何想法为什么?

回答

2

该视图不会加载,因为您试图从nib文件加载而不是从故事板加载。我假设BreakdownViewControllerUIViewController的子类或者可以正确加载的控制器。将您的代码更改为此。

// You could change `BreakdownViewController` to `UIViewController` if it doesn't work with it. 
    // iOS 6.0 and above. 
    BreakdownViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"breakdown"]; 
    [self presentViewController:controller animated:YES completion:nil]; 

由于方法被弃用,你真正应该使用的代码从上面,但你也可以这样做。

// iOS 5.0 
    BreakdownViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"breakdown"]; 
    [self presentModalViewController:controller animated:YES]; 

你也可以添加一些过渡动画到这个问题,以及购买添加以下行之前的presentModalViewControllerpresentViewController

[controller setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal]; 

你也可以更换“presentModalViewController”或presentViewController

线
[self.navigationController pushViewController:controller animated:YES]; 

编辑

后用户使用提供的代码上面,他们得到了,当它达到[self.navigationController pushViewController...]/[self presentViewController...]我认为这是错误的,因为视图控制器上的问题现在越来越抛出这是越来越引发的错误

2013-02-24 16:08:14.517 BudgetMe[1300:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSCFString stringByAppendingString:]: nil argument' *** First throw call stack: (0x1cac012 0x10e9e7e 0x1cabdeb 0xaf87d5 0xddba 0x10f1c7 0x10f232 0x11ac25 0x31a3a3 0x117ee3 0x118167 0x312c 0x10fd705 0x312c0 0x31258 0xf2021 0xf257f 0xf16e8 0x60cef 0x60f02 0x3ed4a 0x30698 0x1c07df9 0x1c07ad0 0x1c21bf5 0x1c21962 0x1c52bb6 0x1c51f44 0x1c51e1b 0x1c067e3 0x1c06668 0x2dffc 0x252d 0x2455) 

的用户正试图推送/呈现。我相信这是因为当这行代码被击中时,它会尝试在移到实际视图控制器之前运行诸如viewDidLoad之类的方法,因此如果发生错误,它将显示为它在此行上。最好的方法是充分利用断点。

我以前NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array' when presenting view controller

+0

我试过了代码,但我得到了以下错误:2013-02-24 16:08:14.517 BudgetMe [1300:c07] ***由于未捕获异常'NSInvalidArgumentException',原因:'*** - [__NSCFString stringByAppendingString:]:无参数” ***第一掷调用堆栈: (0x1cac012 0x10e9e7e 0x1cabdeb 0xaf87d5 0xddba 0x10f1c7 0x10f232 0x11ac25 0x31a3a3 0x117ee3 0x118167 0x312c 0x10fd705 0x312c0 0x31258 0xf2021 0xf257f 0xf16e8 0x60cef 0x60f02 0x3ed4a 0x30698 0x1c07df9 0x1c07ad0 0x1c21bf5 0x1c21962 0x1c52bb6 0x1c51f44 0x1c51e1b 0x1c067e3 0x1c06668 0x2dffc 0x252d 0x2455) – 2013-02-24 16:08:41

+0

@JacobClark这与提供的代码无关。在'[self.navigationController pushViewController ...]'或'[self presentViewController ...]'放置一个断点,这是您曾经使用过的一个断点。我相信这会在它到达这条线时发生,因为当它试图呈现新的视图控制器时,它试图在下一个控制器上运行方法'stringByAppendingString:'。因此,这表明代码正在工作,您刚刚在您要呈现的控制器上有另一个错误。 – Popeye 2013-02-24 16:15:04

+0

我已经放置了一个断点,但它仍然会抛出错误 – 2013-02-24 16:18:06

0

遭遇这个问题你可能想用这个:

[self.storyboard instantiateViewControllerWithIdentifier:@"breakdown"]; 

取而代之的是ALLOC initWithNibName的。

-1

如果我正确地理解了这个问题,你有一个视图控制器在同一个故事板中定义为你试图推动的视图控制器?你为什么不使用segue?创建一个从源到目标的push segue,并使按钮触发器继续。

一旦SEGUE一接通电源,你可以编程方式调用一推:

[self performSegueWithIdentifier:@"breakdownSegue"]; 

但如果你直接接线顺着接下去要调用SEGUE的按钮,就可以跳过这一步。

如果问题是在外部.xib中定义了BreakdownViewController,并且您已将其添加到故事板,则只需从故事板场景中删除该视图,它将从.xib中加载该视图。

相关问题