Przekazywanie danych między kontrolerami widoku DidSelectRowsAtIndexPath Storyboards
W prostej aplikacji testowej próbowałem przekazać obiekt tablicy o nazwie „thisArray” zMasterViewController
do ciągu o nazwie „passingData” wDetailViewController
. Używam Storyboardów iUIViewController
są wbudowane w kontroler nawigacji. UżywającprepareForSegue
metoda, pomyślnie przekazałem dane międzyUIViewController
:
- (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];
}
}
Teraz z jakichś powodów chcę użyćdidSelectRowsAtIndexPath
zamiastprepareForSegue
. Użyłem tego:
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSMutableString *object = thisArray[indexPath.row];
detailViewController.passedData = object;
}
Ale to nie zadziałało. Użyłem następujących:
- (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];
}
Ale to też nie zadziałało.
PYTANIE:
1) Jak poprawnie pisaćdidSelectRowsAtIndexPath
zamienićprepareForSegue
?
2) Jeśli używamdidSelectRowsAtIndexPath
, czy muszę usunąć połączenie segue międzyUIViewController
w serii ujęć?
3) Co, jeśli naprawdę nie ma połączenia segue między kontrolerami widoku, jak mogę nadal przekazywać dane między nimi za pomocądidSelectRowAtIndexPath
?
Dzięki!
AKTUALIZACJA: Na podstawie odpowiedzi i otrzymanych komentarzy napisałem:
Najpierw usunąłem połączenie segue między kontrolerami, ustaw identyfikator tablicy StoryBoardDetailViewController
, nazwa klasy jest również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];
}
ale rozbił się z następującym błędem:
*** Aplikacja kończąca z powodu nieprzechwyconego wyjątkuNSInvalidArgumentException
, powód: „Nie można znaleźć storyboardu o nazwieDetailViewController
w pakiecie