2011-11-21 87 views
0

我對編程知之甚少,但我仍然試圖編寫一個程序,例如,你在視圖控制器1中,按下一個按鈕,它會將你帶到一個隨機選擇的視圖控制器,讓我們說視圖控制器3和視圖控制器3中,你可以按另一個按鈕,它會帶你到另一個隨機選擇的視圖控制器,控制器2等..在視圖控制器之間隨機切換 - 程序崩潰

它的工作原理,但我明顯做錯了什麼,因爲程序崩潰3次或更少的次數,我按下按鈕。

下面是按下的按鈕的動作代碼:

- (IBAction)next { 
// Get random value between 1 and 3 
int y = (arc4random()%3)+1; 

if (y == 1){ 
    [navigationController pushViewController:viewController animated:YES]; 
} 
else if (y == 2){ 
    [navigationController pushViewController:viewController2 animated:YES]; 
} 
else 
    [navigationController pushViewController:viewController3 animated:YES]; 

}

BTW任何與「Y」和arc4random在這部分只是用來做。

有人能告訴我爲什麼它會崩潰嗎? (我是前面說過的初學者) 謝謝!

+0

請引用crash-log-message,如果這不是確定性堆棧跟蹤的重要部分。 – Till

+0

你能顯示你的代碼,初始化viewController/2/3變量嗎? – Denis

+0

看起來您可能沒有正確保留您的視圖控制器 – Ben

回答

0

蘋果文檔(http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html)說,大約pushViewController

重要提示:在iOS系統2.2如果參數viewController 中的對象已位於導航堆棧上,則此方法將引發 異常。在iOS的早期版本中,該方法根本不做任何事情。

這就是你所處的情況,你試圖推動已經在堆疊上的控制器。

你感興趣的方法

- (void)setViewControllers:(NSArray *)viewControllers animated:(BOOL)animated 

這樣做:

[navigationController setViewControllers:[NSArray arrayWithObject: ... ]]; 

而不是...把你的UIViewController

+0

所以我當時就是這樣......你不能將視圖控制器多次推入同一個導航控制器。 – trojanfoe

+0

是的,你是對的 –

+0

謝謝!現在它可以工作。 – EatsDinosaurs

0

我是不是有點肯定的,但也可能是原因,請嘗試一次:

可能是,如果你推一個viewc ontroller一次,你不能再推它,直到你彈出它,因爲它已經在堆棧中。所以你可能需要對代碼進行一些修改。

if (y == 1){ 
    if(isVC1Pushed == NO) 

{ 

    [navigationController pushViewController:viewController animated:YES]; 
isVC1Pushed = YES 
} 
else{ 
[navigationController popToViewController:viewController animated:YES]; 
isVC1Pushed = NO;} 

} 
    } 

將布爾初始化爲NO。對其他視圖控制器也一樣。

+0

這是原因,但我嘗試了與另一個代碼,現在它的作品,謝謝反正! – EatsDinosaurs

+0

對不起,我犯了一個小小的邏輯錯誤..我希望這不會傷害,因爲你有這個想法.. :) – utsabiem

相關問題