web-dev-qa-db-ja.com

navigationControllerを介してセグエでデータを渡す

1つのviewControllerから別のviewControllerにデータをプッシュしようとしています。 viewControllerを別のViewControllerのnavigationControllerに接続し、識別子を"showItemSegue"に設定しました。次の2行でエラーが発生します。

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

イメージイラスト:

enter image description here

コード:

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

}
35
Peter Pik

セグエの宛先View ControllerはUINavigationControllerです。実際の目的のView Controllerに到達するには、トップView Controllerを要求する必要があります。

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