Передача данных между контроллерами представления Раскадровки DidSelectRowsAtIndexPath
В простом тестовом приложении я попытался передать объект массива с именем "thisArray» отMasterViewController
к строке с именем "passedData» в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
в связке