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

时间:2015-01-05 12:57:36

标签: ios swift xctest

我在应用程序中的一个方法中从测试用例访问app delegate时得到了swift_dynamiccast无条件异常。

应用程序中的功能如下:

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

解决了

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

答案 1 :(得分:2)

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