即使對導航的引用似乎正確並且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或根本沒有任何反應。
如果我self.navigationController試試我得到這個錯誤: - [CALayer retrieveValueForKey:]:發送到實例0x3b3b900的無法識別的選擇器 由於未捕獲的異常'NSInvalidArgumentException'而終止應用程序,原因:'*** - [CALayer retrieveValueForKey:]:發送到實例0x3b3b900的無法識別的選擇器' – bwizzy 2009-11-02 15:20:53
另外,如果我完全刪除我的viewDidLoad方法,以便導航控制器應具有開箱即用功能,當點擊庫存返回按鈕時,仍然可以獲得EXEC_BAD_ACCESS。 – bwizzy 2009-11-02 15:21:47
試着打開NSZombies,看看你是否有可能預釋放一個對象。此外,你不清楚你如何設置workoutNavController,但我會使用pushViewController:animated :,而不是設置其viewControllers數組。 – 2009-11-02 15:28:51