2013-02-24 24 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中加載該視圖。

相關問題