executeSegueWithIdentifier против instantiateViewControllerWithIdentifier

Я, кажется, не получаю этот SIGABRT, который я продолжаю получать. У меня есть это приложение для раскадровки iOS, и в раскадровке у меня есть UITableViewController. Теперь я могу взять ячейку TVC и заставить ее выдвигать контроллер просмотра «segue», но что, если мне нужно остановить действие «segue» при определенных условиях? По-видимому, вы не можете этого сделать, поскольку метод prepareForSegue: sender: не допускает этого, и, похоже, он является единственным обратным вызовом, который вызывается, когда выполняется переход.

Поэтому я догадался, что могу перейти в tableView: didSelectRowAtIndexPath: и выполнить переход программным способом. Неоптимальный, но все же ...

Ну, оказывается, я не угадал. Или, по крайней мере, я делаю что-то не так. Самый очевидный способ сделать это будет

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self performSegueWithIdentifier:@"TheOtherIdentifier" sender:self];
}

но все приложение падает с SIGABRT, который не дает никакой полезной информации (и да, я уверен, что именно эта строка вызывает сбой приложения, я проверил с помощью отладчика :) Кроме того, VC, который я пытаюсь загрузить правильно установлен идентификатор, потому что следующий код

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    UIViewController *vc = [self.storyboard instantiateViewControllerWithIdentifier:@"TheOtherIdentifier"];
    [self.navigationController pushViewController:vc animated:YES];
}

"работает". Кавычки указывают, что это явно не тот способ, которым должен быть выполнен такой переход.

Теперь: идеи?

Ответы на вопрос(1)

Ваш ответ на вопрос