PrepareForSegue получает вызов дважды, с попыткой представить <UINavigationController> во время презентации
Я новичок в программировании на ios и спрашиваю здесь, но я посещаю все время! Я сфокусирован на том, почему я получаю эту проблему, она компилируется без ошибок, и я проверил и проверил все свои выходные данные и идентификаторы в своей MainStoryboard.
У меня есть 2 UITableViewControllers, я передаю строку от первой до второй, когда пользователь выбирает элемент в таблице, поэтому в
FirstTableViewController.m
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
int sel = indexPath.row;
if (sel == 0) {
_keyName = [NSString stringWithString:_string1];
NSLog(@"the table was selected at cell 0, %@", _string1);
}
if (sel == 1) {
_keyName = [NSString stringWithString:_string2];
}
// more code below...
}
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([segue.identifier isEqualToString:@"ResultsSegue"])
{
UINavigationController *navigationController = segue.destinationViewController;
ResultsViewController *rv = [[navigationController viewControllers] objectAtIndex:0];
[rv setResults: _keyName];
NSLog(@"in the progress view, %@", _keyName);
//rv.delegate = (id)self;
rv.delegate = self;
}
}
И в моем ResultsViewController.m
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"in the results, %@", _results);
NSLog(@"in the results view");
}
В показании NSlog я получаю:
...
в представлении прогресса (null)
в результатах, (null)
в представлении прогресса "Правая строка"
Предупреждение: попытка представить
Затем, когда я нажимаю кнопку отмены, чтобы вернуться в firstTableview и снова нажать подробное представление, оно больше не показывает нуль.
в представлении прогресса, правая строка
в результатах, правая строка
в представлении прогресса, правая строка
Ответы
Ответ 1
Проблема заключается в том, что prepareForSegue вызывается до didSelectRowAtIndexPath. Вам следует просто исключить метод didSelectRowAtIndexPath и сделать все в prepareForSegue. Вы можете использовать следующую строку, чтобы получить требуемый индекс:
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
Ответ 2
Ответ Роба помог мне, а также - спасибо! Я кодирую в Swift, поэтому для тех, кто сталкивается с этим во время Swifting, вот как получить индекс (или строку индекса), нажав на Swift 3:
var rowClicked = (self.tableView.indexPathForSelectedRow?.row)!