Swift 通过测试用例访问应用委托引发 swift_dynamiccast 无条件异常

Posted

技术标签:

【中文标题】Swift 通过测试用例访问应用委托引发 swift_dynamiccast 无条件异常【英文标题】:Swift accessing app delegate through test cases raises swift_dynamiccast unconditional exception 【发布时间】:2015-01-05 12:57:35 【问题描述】:

在应用程序中的一种方法中从测试用例访问应用程序委托时,我遇到了 swift_dynamiccast 无条件异常。

应用程序中的功能是这样的:

func sampleMethod()

    var appdelegate:AppDelegate = UIApplication.sharedApplication().delegate! as AppDelegate

测试用例访问此方法为:

func testStart()

    var sample:MyClass = MyClass()
    sample.sampleMethod()

它在方法 sampleMethod() 中引发异常,然后继续。我在构建阶段的测试用例项目中添加了 MyClass 和 AppDelegate 文件。

有什么建议吗?类似的未回答问题here.

【问题讨论】:

也许这有帮助? ***.com/q/26946677/1091402 【参考方案1】:

这是因为在测试的情况下 AppDelegate 对象与主项目 AppDelegate 的类型不同。因此,您的应用程序崩溃了

class MyClass: NSObject 

    func someMethod() 
        var checkObject:AnyObject = UIApplication.sharedApplication().delegate!;
        NSLog("%@", checkObject.description);
        var appdelegate:AppDelegate = AppDelegate();
        NSLog("%@", appdelegate);
    


你可以在控制台看到这个函数的结果:

2015-01-14 13:03:58.299 TestSwift[654:282510] <TestSwift.AppDelegate: 0x17007b940>
2015-01-14 13:04:01.085 TestSwift[654:282510] <TestSwiftTests.AppDelegate: 0x17467f740>

可能的解决方案:使用 AnyObject 变量而不是强制转换为 AppDelegate

【讨论】:

【参考方案2】:

您是否将 AppDelegate.swift 添加到测试的目标成员中?

请尝试从您的应用程序模块中导入它。

瑞克是对的。我遇到了类似的问题,经过解决后解决了

UIApplication.sharedApplication().delegate as AppDelegate causes EXC_BAD_ACCESS using it on swift unit test

【讨论】:

以上是关于Swift 通过测试用例访问应用委托引发 swift_dynamiccast 无条件异常的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS + Swift 中关闭我的应用程序的 Internet 访问

快速访问应用程序委托变量延迟视图加载

如何为委托方法编写 GHunit 测试用例?

Swift 包资源颜色在 CI 测试用例中返回为零。但是在本地测试用例中返回正常

在应用程序委托中访问全局函数时出现问题

swift 在swif打开网址