向前传递数据时的 Swift 有趣的 NSExceptionError

Posted

技术标签:

【中文标题】向前传递数据时的 Swift 有趣的 NSExceptionError【英文标题】:Swift Interesting NSExceptionError When Passing Data Forward 【发布时间】:2018-08-25 10:07:42 【问题描述】:

我在这里有一个非常简单的问题,我无法解决。这段代码运行良好,引导我进入第五个视图控制器。

@objc func OnbtnPlusTouched()


    let uivc = storyboard!.instantiateViewController(withIdentifier: "FifthViewController")
    navigationController!.pushViewController(uivc, animated: true)


但是,我想将数据 locationName 从此视图控制器传递给下一个。因此我使用了这个代码段:

@objc func OnbtnPlusTouched()


    let vc = FifthViewController(nibName: "FifthViewController", bundle: nil)
    vc.locationName = locationName
    navigationController?.pushViewController(vc, animated: true)

但现在我在我的应用程序中输入此功能后立即收到此错误:

libc++abi.dylib:以未捕获的类型异常终止

NSException 和由于未捕获的异常而终止应用程序 'NSInternalInconsistencyException',原因:'无法加载 NIB 捆绑:'NSBundle

如果有任何帮助,我将不胜感激,谢谢!

【问题讨论】:

为什么仅仅因为你想设置一个属性就需要改变视图控制器的创建方式?为什么不进行类型转换呢? @JoakimDanielson 那是因为这是我知道在这种情况下向前传递数据的唯一方法:-( 您是否也将视图和控制器从情节提要移动到 XIB? @Willeke 我没有触及故事板中的任何内容,我只是在前一段时间在我的故事板中添加了标题,仅此而已。我不明白上面的代码如何工作,但下面的代码不能。 如果 nib 不存在,则无法从 nib 加载视图控制器。 【参考方案1】:

试试这个

@objc func OnbtnPlusTouched() 
    guard let uivc = storyboard!.instantiateViewController(withIdentifier: "FifthViewController") as? FifthViewController else 
         return 
    
    uivc.locationName = locationName
    navigationController!.pushViewController(uivc, animated: true)

【讨论】:

你不应该在这里强制解开storyboard。使用可选链接,您可以在一个语句中检查两种情况

以上是关于向前传递数据时的 Swift 有趣的 NSExceptionError的主要内容,如果未能解决你的问题,请参考以下文章

Swift:在闭包中传递来自不同范围的值

'Pods-App'目标具有传递依赖关系,包括在swift框架中使用GTM时的静态二进制文件

CallContext 正在向前传递之前设置的数据

向前传递后如何将数据向后传递给视图控制器?

celery传参时的对象转换

路径包含有趣字符时的 TSQL OPENJSON