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

Swift accessing app delegate through test cases raises swift_dynamiccast unconditional exception

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

应用中的函数是这样的:

func sampleMethod()
{
    var appdelegate:AppDelegate = UIApplication.sharedApplication().delegate! as AppDelegate
}

测试用例正在访问此方法:

func testStart()
{
    var sample:MyClass = MyClass()
    sample.sampleMethod()
}

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

这里有什么问题吗?类似的未回答问题 here.

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

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

Rick 是对的。我遇到了类似的问题,经过

后解决了

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

这是因为测试情况下的 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