performSegueWithIdentifier vs instantiateViewControllerWithIdentifier

Parece que não entendo esse SIGABRT que continuo recebendo. Eu tenho esse aplicativo iOS de storyboard e, no storyboard, tenho um UITableViewController. Agora, posso pegar uma célula do TVC e pressionar o controlador de exibição "segue", mas e se eu precisasse parar a ação "segue" em determinadas condições? Aparentemente, você não pode, pois o método prepareForSegue: sender: não permite isso e parece ser o único retorno de chamada que é chamado quando uma transição está prestes a ser executada.

Então, imaginei que poderia entrar no tableView: didSelectRowAtIndexPath: e executar o segue programaticamente. Subótimo, mas ainda assim…

Bem, verifica-se que eu acho errado. Ou pelo menos, estou fazendo algo errado. A maneira mais óbvia de fazer isso seria

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

mas todo o aplicativo trava com um SIGABRT, que não fornece nenhuma informação útil (e sim, tenho certeza de que é a linha que causa o travamento do aplicativo, verifiquei com o depurador :) Além disso, o VC que estou tentando load tem o identificador definido corretamente, porque o seguinte código

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

"trabalho". As aspas indicam que claramente não é assim que essa transição deve ser realizad

Agora: idéias?