2012-11-20 102 views
0

可能重複時:從2
iphone - 「Pushing the same view controller instance more than once is not supported」 exceptionUINavigationController的錯誤推視圖控制器

我正確地從1推test2ViewController如下,

self.controller2 = [[test2ViewController alloc] initWithNibName:@"test2ViewController" bundle:nil anUser:self.idUser]; 

[[self navigationController] pushViewController:self.controller2 animated:NO]; 

[self.controller2 release]; 

到1 I彈出它在初始化1之後(需要初始化)。

self.controller1 = [[test1ViewController alloc] initWithNibName:@"test1ViewController" bundle:nil anUser:self.idUser]; 

    [[self navigationController] popToRootViewControllerAnimated:NO]; 

    [self.controller1 release]; 

和問題appers試圖再次從2 1,應用程序崩潰與推錯誤時,

Pushing the same view controller instance more than once is not supported 

什麼做錯了嗎?謝謝。

+0

[[self navigationController] popToRootViewControllerAnimated:NO];應該是您需要讓第二個視圖控制器彈出的唯一行。你的第一個仍然存在於導航堆棧中。 – geraldWilliam

+0

爲什麼你認爲你需要重新初始化? –

回答

1

那麼首先您要創建test2ViewController的另一個實例,以便您每次更改視圖時都會轉到其他實例。

你應該做的:

if(!test2ViewController) 
    secondView = [[test2ViewController alloc] init...]; 
[self navigationController pushViewController:secondView animated:NO]; 

,並返回,簡單地說:

[self.navigationController popViewControllerAnimated:NO]; 

PoppingtoRoot使你彈出來,所用的方法pushViewController非常第一個視圖控制器。

0

通過您發佈的代碼判斷,您只需將一個視圖控制器(controller2)推送到您的導航控制器。

popToRootViewControllerAnimated:將刪除堆棧中的所有視圖控制器,除了根視圖控制器(在您的情況下似乎是controller2)。所以基本上它什麼都不做。

然後,您嘗試再次推送相同的視圖controller2,它失敗,因爲如錯誤消息所述,這是不允許的。

0

您不需要重新初始化viewController1;如果您從1推視圖控制器2,則只能調用

[self.navigationController popToRootViewControllerAnimated:NO]; 

因爲viewController1已經在堆棧中。這個方法會做的是除去第一個視圖控制器,然後移回棧上的所有視圖控制器。

如果viewController1不是rootView控制器,你應該使用

[self.navigationController popViewControllerAnimated:NO]; 

這將彈出只有最後壓入堆棧視圖 - 控制並顯示它下面的一個。

相關問題