проблема с отображением контроллера UINavigationController - PullRequest
0 голосов
/ 02 ноября 2009

У меня проблемы с подключением UIViewController к контроллеру UINavigation, хотя ссылка на навигацию кажется правильной, а подсчет viewControllers показывает правильное число.

У меня есть UINavController, который получает свой первый набор UIViewController, а затем контроллер Nav представлен в модальном представлении:

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

Этот первый UIViewController (manageWorkoutController) имеет табличное представление, и при касании одной из ячеек второй 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) я настраиваю UIBarButtonItem для отмены и сохранения в методе viewDidLoad, чтобы кнопка отмены заменяла кнопку возврата по умолчанию на панели навигации.

- (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, где я хочу извлечь текущее представление из контроллера nav и вернуться назад, я получаю ошибку 'EXEC_BAD_ACCESS'. Это метод:

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

Я пробовал метод цепочки обратно к классу, который фактически владеет navController, а также с использованием popToViewController: Animated :. Если я использую NSLog, чтобы распечатать счетчик viewControllers из метода cancelDifficulty, он показывает правильное число, но если я пытаюсь взаимодействовать с ним, я либо получаю EXEC_BAD_ACCESS, либо ничего не происходит вообще.

Ответы [ 2 ]

2 голосов
/ 02 ноября 2009

Почему вы просто не получаете доступ к свойству navigationController вашего контроллера представления, а не приводите его parentViewController в качестве UINavigationController (что, впрочем, является плохой идеей).

0 голосов
/ 02 ноября 2009

Я бы попробовал следующее и посмотрел, работает ли он:

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

Может быть, что parentViewController на самом деле не UINavigationController

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...