web-dev-qa-db-fra.com

Transmission de données avec enchaînement via la navigation

J'essaie de pousser les données d'un viewController à un autre. J'ai connecté un viewController à un autre ViewController navigationController, puis j'ai défini l'identifiant sur "showItemSegue". J'obtiens une erreur dans ces deux lignes:

var detailController = segue.destinationViewController as ShowItemViewController
detailController.currentId = nextId!

Illustration de l'image:

enter image description here

Le code:

override func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {


    nextId = itemArray?.objectAtIndex(indexPath.row).objectForKey("objectId") as? NSString

    self.performSegueWithIdentifier("showItemSegue", sender: self)

}


override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {

    if (segue.identifier == "showItemSegue") {
        var detailController = segue.destinationViewController as ShowItemViewController
        detailController.currentId = nextId!
    }

}
36
Peter Pik

Le contrôleur de vue de destination de la séquence est le UINavigationController. Vous devez lui demander son contrôleur de vue de dessus pour accéder au contrôleur de vue de destination réel:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showItemSegue" {
        let navController = segue.destination as! UINavigationController
        let detailController = navController.topViewController as! ShowItemViewController
        detailController.currentId = nextId!
    }
}
68
vacawama