2009-11-02 86 views
0

即使對導航的引用似乎正確並且viewControllers上的計數顯示正確的數字,我也無法從UINavigation控制器彈出UIViewController。從UINavigationController中彈出視圖控制器的問題

我有一個UINavController即得到它的第一UIViewController的組,然後將導航控制器在一個模態的視圖呈現:

workoutNavController.viewControllers = [NSArray arrayWithObject:manageWorkoutController]; 
[self presentModalViewController:workoutNavController animated:YES]; 

即第一UIViewController中(manageWorkoutController)具有表視圖,並且當所述小區中的一個被觸摸的第2的UIViewController推到導航控制器:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    switch (indexPath.row) { 

     case 0: 
      //do nothing no nav-view here 
      break; 

     //DIFFICULTY 
     case 1: 
      workoutDifficultyController.title = @"Workout Difficulty"; 
      [(UINavigationController *)self.parentViewController pushViewController:workoutDifficultyController 
                      animated:YES]; 
      break; 

     //DATE 
     case 2: 
      workoutDateController.title = @"Workout Date"; 
      [(UINavigationController *)self.parentViewController pushViewController:workoutDateController 
                      animated:YES]; 
      break; 

     default: 
      break; 

    }//end switch 

}//end didSelectRowAtIndexPath 

在第二的UIViewController(workoutDifficultyController)我設立在viewDidLoad方法一取消和保存的UIBarButtonItem,所以取消按鈕覆蓋導航欄上的默認後退按鈕。

- (void)viewDidLoad { 

    UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelDifficulty:)]; 
    [self.navigationItem setLeftBarButtonItem:cancelButton]; 
    [cancelButton release]; 

    UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(saveDifficulty:)]; 
    [self.navigationItem setRightBarButtonItem:saveButton]; 
    [saveButton release]; 

    [super viewDidLoad]; 

}//end viewDidLoad 

我的問題是,在cancelDifficulty方法,我要爆開的導航控制器當前視圖和回去,我不斷收到一個「EXEC_BAD_ACCESS」錯誤。這是方法:

-(IBAction)cancelDifficulty:(id)sender { 
    [(UINavigationController *)self.parentViewController popViewControllerAnimated:YES]; 
}//cancelDifficulty 

我試過的方法鏈接回到那個真正擁有navController類,以及使用popToViewController:動畫:.如果我使用NSLog從cancelDifficulty方法中打印出viewControllers計數,它會顯示正確的數字,但如果我嘗試與它交互,則可以獲取EXEC_BAD_ACCESS或根本沒有任何反應。

回答

2

爲什麼你不只是訪問你的視圖控制器的navigationController屬性,而不是將它的parentViewController作爲UINavigationController投入(這是一個壞主意,無論如何)。

+0

如果我self.navigationController試試我得到這個錯誤: - [CALayer retrieveValueForKey:]:發送到實例0x3b3b900的無法識別的選擇器 由於未捕獲的異常'NSInvalidArgumentException'而終止應用程序,原因:'*** - [CALayer retrieveValueForKey:]:發送到實例0x3b3b900的無法識別的選擇器' – bwizzy 2009-11-02 15:20:53

+0

另外,如果我完全刪除我的viewDidLoad方法,以便導航控制器應具有開箱即用功能,當點擊庫存返回按鈕時,仍然可以獲得EXEC_BAD_ACCESS。 – bwizzy 2009-11-02 15:21:47

+0

試着打開NSZombies,看看你是否有可能預釋放一個對象。此外,你不清楚你如何設置workoutNavController,但我會使用pushViewController:animated :,而不是設置其viewControllers數組。 – 2009-11-02 15:28:51

0

我想嘗試以下,看看它的工作原理:

-(IBAction)cancelDifficulty:(id)sender { 
    [(UINavigationController *)self.navigationController popViewControllerAnimated:YES]; 
}//cancelDifficulty 

這可能是因爲parentViewController是不是真的一個UINavigationController

+0

同樣的事情發生,EXEC_BAD_ACCESS,如果我登錄self.parentViewController它是一個UINavigationViewController,並且如果我在[self.parentViewController viewControllers]上記錄一個計數,它顯示2是正確的。 – bwizzy 2009-11-02 15:19:49

+0

有時EXEC_BAD_ACCESS意味着您正嘗試訪問已釋放內存中的某些內容。仔細檢查你是否沒有釋放任何你需要的對象。 – macinjosh 2009-11-02 15:23:20

+0

似乎正在通過popViewControllerAnimated:方法引發EXEC_BAD_ACCESS。看到上面的評論,如果我不覆蓋欄按鈕項目和使用股票功能,它仍然失敗。 NSLog(@「VCs:%@」,[(UINavigationController *)self.parentViewController viewControllers]);註銷這個,所以我不知道爲什麼我不能彈出一個:VC:() – bwizzy 2009-11-02 15:40:38

相關問題