Je reçois un plantage lorsque j'essaie de définir une propriété dans ma séquence. Il s'agit d'une UIView transmettant une propriété à un contrôleur de navigation qui a une TableView comme vue racine. Il est censé aller à mon TableViewController, mais il semble qu'il soit intercepté par ce NavigationController et génère une erreur de sélecteur non reconnue.
Segue:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"showItems"]) {
ShowItemsTableViewController *destinationViewController = [segue destinationViewController];
[destinationViewController setItems:[self itemsFromCoreData]];
}
}
Erreur:
-[UINavigationController setItems:]: unrecognized selector sent to instance 0x10920c840
Que se passe t-il ici? Ce NavigationController n'a pas de classe associée, il est juste dans le storyboard et apparaît de manière modale. Cela fonctionne si je définis la séquence dans le storyboard pour aller directement à la vue, pas le NavigationController, mais j'ai vraiment besoin de la navigation là-bas. Comment puis-je contourner cela?
Étant donné que le contrôleur de vue de destination est en fait le contrôleur de navigation, essayez d'accéder à la vue racine comme suit:
UINavigationController *navController = [segue destinationViewController];
ShowItemsTableViewController *SITViewController = (ShowItemsTableViewController *)([navController viewControllers][0]);
[SITViewController setItems:[self itemsFromCoreData]];
Pour Swift:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "segueShowNavigation" {
var DestViewController = segue.destinationViewController as! UINavigationController
let targetController = DestViewController.topViewController as! ReceiveViewController
}
}
Obtenez le topViewController du UINavigationController:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"showItems"]) {
UINavigationController *navigationController = segue.destinationViewController;
ShowItemsTableViewController *showItemsTVC = (ShowItemsTableViewController * )navigationController.topViewController;
showItemsTVC.items = [self itemsFromCoreData];
}
}
Regardez la classe de contrôleur de vue dans la préparation de la séquence - c'est le contrôleur de navigation. Castez-le dans cette classe, puis vous pouvez accéder à la vue souhaitée en lui demandant son contrôleur de vue de dessus.