prepareForSegue chamado antes de didSelectRowAtIndexPath somente quando o terceiro segue é adicionado

Eu tenho 3 segues para 3 visões diferentes. 2 são implementados sem nenhum problema, é quando o terceiro é criado que os problemas ocorrem.

Eu tenho o seguinte método didSelectRowAtIndexPath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    NSLog(@" ----------  did select row");

    if(indexPath.section == 0){
        if(indexPath.row == [self.data count]-1){
            //prior to adding this, everything works
            [self performSegueWithIdentifier:@"MoreComments" sender:self];
        }else{
            [self performSegueWithIdentifier:@"FriendView" sender:friend];
        }
    }else if(indexPath.section == 1){
        if(indexPath.row == [self.data2 count]-1){
            [self performSegueWithIdentifier:@"MorePosts" sender:self];
        }else{
            [self performSegueWithIdentifier:@"FriendView" sender:friend];
        }
    }
}

Eu tenho o seguinte método prepareForSeque:

-(void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([segue.identifier isEqualToString:@"MorePosts"]){
        MorePostsViewController *mfamvc = segue.destinationViewController;
        mfamvc.data = self.data;
    }else if([segue.identifier isEqualToString:@"FriendView"]){
        FriendViewController *fvc = segue.destinationViewController;
        fvc.friend = friend;
    }else if([segue.identifier isEqualToString:@"MoreComments"]){
          MoreCommentsViewController *mcvc = segue.destinationViewController;
          mcvc.data = self.data2;
    }
}

Antes de arrastar o controle do meu celular para a última visualização, posso ver que o meu programa atinge o hardware e depois se prepara. Isso faz com que todo o trabalho de navegação da vista seja perfeito.

Assim que eu controlo o arrasto da minha célula para o MoreCommentsViewController, começo a ver o erro:

animação de push aninhada pode resultar em barra de navegação corrompida Finalizando uma transição de navegação em um estado inesperado. Árvore de subvisualização da barra de navegação pode ficar corrompida.

Percebo que agora também o prepareforseque está sendo chamado duas vezes, com prepareforseque sendo chamado primeiro, depois o restabelece e depois prepara-se novamente.

O que estou fazendo errado para ir condicionalmente a essas diferentes visões?

questionAnswers(2)

yourAnswerToTheQuestion