2014-11-15 16 views
33

Ich versuche, Daten von einem viewController zum anderen zu schieben. Ich habe einen ViewController mit dem NavigationController eines anderen ViewControllers verbunden und dann den Bezeichner auf "showItemSegue" gesetzt. Ich erhalte eine Fehlermeldung in diesen beiden Zeilen:Übergeben von Daten mit segue durch navigationController

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

Bild Illustration:

enter image description here

Der 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! 
    } 

} 
+0

Bitte die vollständige Fehlermeldung schreiben –

Antwort

62

Das Ziel-View-Controller des Segue ist die UINavigationController. Sie benötigen es, Controller für seine Draufsicht zu bitten, die wirkliche Ziel-View-Controller zu erhalten:

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! 
    } 
} 
+0

wie ein Zauber funktioniert! Danke, Kumpel! Nach Stunden hat es mir einige Stunden gerettet :) – datayeah

+0

Danke, diese Lösung scheint mit swift 3 zu funktionieren – mic

Verwandte Themen