来自不同 Storyboard的 Swift PushViewController

标签 swift uiviewcontroller uinavigationcontroller uistoryboard uistoryboardsegue

<分区>


我正在尝试以编程方式显示不同 Storyboard的我的一个 ViewControllers。但由于某些原因,我试图显示的 ViewController 的属性为零。

那是我的错误:在展开可选值时意外发现 nil

I'm getting the error in my SecondViewController. It is showing but my app crashes due to the properties being nil.

这是我的代码:

let secondStoryBoard = UIStoryboard(name: "SecondStoryBoard", bundle: nil)
let secondViewController = secondStoryBoard.instantiateViewController(withIdentifier: "secondVC") as! SecondVC


self.navigationController?.pushViewController(secondViewController, animated: true)

这是产生错误的代码:

class SecondVC: ViewController
{
    @IBOutlet weak var mapView: MKMapView!
    mapView.isHidden = true // ERROR!! Unexpectedly found nil while unwrapping an Optional value
}

SOLVED: just had to reconnect my @IBOutlet connections

最佳答案

这意味着下面的行要么是nil,要么不是SecondVC类型。

secondStoryBoard.instantiateViewController(withIdentifier: "secondVC")

我会在你的 Storyboard中验证你有一个标识符 secondVC 并且 View Controller 的类型是 SecondVC


编辑:

根据 OP 在问题中发布的新代码,将 SecondVC 更改为以下内容应该可行。

class SecondVC: ViewController
{
    @IBOutlet weak var mapView: MKMapView!

    override func viewDidLoad() {
        mapView.isHidden = true
    }
}

基本上,这将等到 View 加载完毕,然后再访问 mapView。对于原始代码,您试图在 mapView 实际加载之前访问它。


编辑 2:

看起来 mapView 导出没有正确链接到 Storyboard。

关于来自不同 Storyboard的 Swift PushViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53963659/

相关文章:

ios - 在 iOS 11 中,UIViewController 的 transitionFromViewController 从不调用它的完成 block

ios - 从导航堆栈中删除 View Controller 时如何删除导航栏项目?

ios - 如何设置 URLSession Swift 3

ios - CMS,iOS 应用程序后端

ios - 切换选项卡并呈现模式 ViewController 后 TabViewController 为黑色

iphone - UINavigation 显示第三个 View

ios - 在 app Delegate 中使用 pushViewController

swift - 无法调用 NSManagedObject 类上的指定初始化程序 -- CoreData

ios - 隐蔽 3 级嵌套 json 到 Alamofire 参数

ios - iPhone 的 UIViewController 大小不正确