performSegueWithIdentifier vs instantiateViewControllerWithIdentifier

Je ne semble pas avoir ce SIGABRT que je reçois. J'ai cette application iOS de storyboard, et dans le storyboard j'ai un UITableViewController. Maintenant, je peux prendre une cellule de la TVC et la faire pousser sur le controller de vue "segue", mais si je devais arrêter l'action "segue" dans certaines conditions? Apparemment, vous ne pouvez pas, puisque la méthode prepareForSegue: sender: ne le permet pas, et il semble être le seul callback qui est appelé quand une transition est sur le point d'être effectuée.

J'ai donc deviné que je pourrais aller dans la tableView: didSelectRowAtIndexPath: et effectuer le segue par programmation. Sous-optimal, mais quand même …

Eh bien, il se trouve que j'ai mal deviné. Ou au less, je fais quelque chose de mal. La façon la plus évidente de le faire serait

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

mais l'application entière se bloque avec un SIGABRT, qui ne donne aucune information utile (et oui, je suis sûr que c'est cette ligne qui fait planter l'application, j'ai vérifié avec le débogueur 🙂 De plus, le VC que j'essaye de charger a l'identifiant correctement défini, car le code suivant

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

"travaux". Les guillemets indiquent que ce n'est clairement pas la façon dont une telle transition devrait être effectuée.

Maintenant: des idées?

Essaye ça:

  1. Utilisez le premier bloc de code et non le second.
  2. Dans le contrôle de storyboard faites glisser de la cellule à l'autre controller de vue. Notez qu'une section est créée.
  3. Cliquez sur la section. Utilisez l'inspecteur d'attributes pour donner le code et l'identifiant "theOtherIdentifier" (minuscule "t" recommandé). Sélectionnez également un style de "push" en se basant sur le fait que vous utilisez un controller de navigation.
  4. Storyboard instancie l'autre controller de vue. Assurez-vous de ne pas le faire dans votre code.