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 访问