2012-11-28 203 views
1

我有基於導航的應用程序。我已經創建了應用一個UINavigationControllerdidFinishLaunchingWithOptions委託方法是這樣的:導航欄後退按鈕,崩潰的應用程序

self.initialviewcontroller = [[InitialViewController alloc] initWithNibName:@"InitialViewController" bundle:nil]; 
UINavigationController *myNavController = [[UINavigationController alloc] initWithRootViewController:self.initialviewcontroller]; 

self.window.rootViewController = myNavController; 
[self.window makeKeyAndVisible]; 

InitialViewController我有一個按鈕,其將導航到SecondViewController。因此,在按鈕的動作我推SecondViewController如下:

if(self.secondView != nil) 
    self.secondView = nil; 
self.secondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
[self.navigationController pushViewController:self.secondView animated:YES]; 

現狀:導航工作正常,我能夠InitialViewController之間導航到SecondViewController。當我在SecondViewController並按下設備的主頁按鈕時,應用程序進入後臺,當我重新打開應用程序時,它會從關閉它的位置打開應用程序(即SecondViewController)。現在,如果我按下後退按鈕轉到InitialViewController,該應用程序崩潰。

它在ios模擬器中工作正常,但設備上發生崩潰。

我不明白我所做的錯誤是什麼?

這裏是我的錯誤代碼

異常類型:EXC_BAD_ACCESS(SIGSEGV) 異常代碼:KERN_INVALID_ADDRESS在0x654b495d 墜毀主題:0

主題0名:調度隊列:com.apple.main線程

+0

發送給我們錯誤的文本。 –

+0

另外,當你的筆尖與你的視圖控制器名稱相同時,你可以使用'[[SecondViewController alloc] init];'它將默認爲同名的筆尖。 –

+0

我認爲問題是,當應用程序在後臺輸入系統正在釋放'InitialViewController'實例,以確保您可以在'InitialViewController'類的'dealloc'方法中添加'NSLog()'調用 – tkanzakic

回答

0

你的代碼是

if(self.secondView != nil) 
    self.secondView = nil; 
self.secondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
[self.navigationController pushViewController:self.secondView animated:YES]; 

,而不是這種使用以下。

SecondViewController *secondViewobj = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil]; 
    [self.navigationController pushViewController:secondViewobj animated:YES]; 
0

我覺得你的問題是,UINavigationController的是越來越釋放。 您應該將第二個視圖放在第一個視圖的uinavigationcontroller中,然後重試。

希望這有助於:)

相關問題