Daten zwischen Ansichts-Controllern übertragen DidSelectRowsAtIndexPath Storyboards
In einer einfachen Test-App habe ich versucht, ein Array-Objekt mit dem Namen "thisArray" von der zu übergebenMasterViewController
auf die eine Zeichenfolge mit dem Namen "PassedData" in derDetailViewController
. Ich benutze Storyboards und dasUIViewController
sind im Navigationscontroller eingebettet. Verwendung derprepareForSegue
Methode, ich habe die Daten erfolgreich zwischen demUIViewController
:
- (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];
}
}
Jetzt aus einigen Gründen möchte ich verwendendidSelectRowsAtIndexPath
anstattprepareForSegue
. Ich habe das benutzt:
- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSMutableString *object = thisArray[indexPath.row];
detailViewController.passedData = object;
}
Aber es hat nicht funktioniert. Ich habe folgendes benutzt:
- (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];
}
Aber es hat auch nicht funktioniert.
FRAGE:
1) So schreiben Sie richtigdidSelectRowsAtIndexPath
ersetzenprepareForSegue
?
2) Wenn ich benutzedidSelectRowsAtIndexPath
, muss ich die segue Verbindung zwischen dem entfernen?UIViewController
im Storyboard?
3) Was ist, wenn zwischen den View-Controllern wirklich keine Segue-Verbindung besteht? Wie kann ich die Daten trotzdem zwischen ihnen übermitteln?didSelectRowAtIndexPath
?
Vielen Dank!
UPDATE: Basierend auf der Antwort und den Kommentaren, die ich erhalten habe, habe ich Folgendes geschrieben:
Zuerst habe ich die Segue-Verbindung zwischen den Controllern entfernt und die StoryBoard-ID eingestelltDetailViewController
Der Name der Klasse ist auchDetailViewController
.
- (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];
}
aber es ist immer mit dem folgenden Fehler abgestürzt:
*** App wird aufgrund einer nicht erfassten Ausnahme beendetNSInvalidArgumentException
, Grund: 'Konnte kein Storyboard mit dem Namen findenDetailViewController
im Bundle