我试图将数据从一个viewController推送到另一个viewController.我已将一个viewController连接到另一个viewController的navigationController,然后将标识符设置为"showItemSegue".我在这两行中发现一个错误:

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

图片说明:

在此处输入图像描述

代码:

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

}

推荐答案

segue的目标视图控制器是UINavigationController.您需要请求它提供其俯视图控制器,才能到达真正的目标视图控制器:

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

Swift相关问答推荐

防止NavigationLink自行返回导航视图

为表单部分赋予背景 colored颜色 /渐变

如何为任务扩展的泛型静态函数获得自动类型推理

expose 不透明的底层类型

Swift 扩展:通过方法重载增强现有类

使用View()和List()无法显示影子

使第二个视图变灰 SwiftUI

覆盖一个子元素的 HStack 对齐方式

ScreenCaptureKit/CVPixelBuffer 格式产生意外结果

如何判断一个值是否为 Int 类型

RxSwift 中 Single.just(...) 和 Observable.just(...) 之间有区别吗?

XCUITest 在 TearDown 期间随机失败-无法终止 com.bundle.id

使 Picker 与其他 BinaryInteger 类型兼容

符合协议 - 错误?

Vapor, fluent 使用 PostgreSQL 保存/创建复杂模型

为什么swiftui中的导航视图栏那么大?

我将哪种 Swift 数据类型用于货币

Swift 协议只能设置?

Swift performSegueWithIdentifier 不起作用

在这个例子中美元符号有什么作用?