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];
}
"работает". Кавычки указывают, что это явно не тот способ, которым должен быть выполнен такой переход.
Теперь: идеи?