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