Передача данных между контроллерами представления Раскадровки DidSelectRowsAtIndexPath
В простом тестовом приложении я попытался передать объект массива с именем thisArray изMasterViewController
к строке с именем «sentData» вDetailViewController
, Я использую Раскадровки иUIViewController
встроены в контроллер навигации. С помощьюprepareForSegue
метод, я успешно передал данные междуUIViewController
:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"pushData"]) {
NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
DetailViewController *destViewController = segue.destinationViewController;
destViewController.passedData = [thisArray objectAtIndex:indexPath.row];
}
}
Теперь по некоторым причинам я хочу использоватьdidSelectRowsAtIndexPath
вместоprepareForSegue
, Я использовал это:
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSMutableString *object = thisArray[indexPath.row];
detailViewController.passedData = object;
}
Но это не сработало. Я использовал следующее:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
NSMutableString *object = thisArray[indexPath.row];
detailViewController.passedData = object;
[self.navigationController pushViewController:detailViewController animated:YES];
}
Но это также не сработало.
ВОПРОС:
1) Как правильно написатьdidSelectRowsAtIndexPath
заменитьprepareForSegue
?
2) Если я используюdidSelectRowsAtIndexPath
мне нужно удалить переходную связь междуUIViewController
в раскадровке?
3) Что, если между контроллерами представления действительно нет последовательной связи, как я могу передавать данные между ними, используяdidSelectRowAtIndexPath
?
Спасибо!
ОБНОВЛЕНИЕ: Основываясь на ответе и комментариях, которые я получил, я написал следующее:
Сначала я удалил соединение между контроллерами, установил идентификатор StoryBoardDetailViewController
, название класса такжеDetailViewController
.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
UIStoryboard* sb = [UIStoryboard storyboardWithName:@"DetailViewController"
bundle:nil];
UIViewController* vc = [sb instantiateViewControllerWithIdentifier:@"DetailViewController"];
NSMutableString *object = thisArray[indexPath.row];
detailViewController.passedData = object;
[self.navigationController pushViewController:detailViewController animated:YES];
}
но его сбой со следующей ошибкой:
*** Завершение приложения из-за необработанного исключенияNSInvalidArgumentException
Причина: «Не удалось найти раскадровку с именемDetailViewController
в связке