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
我在应用程序中的一种方法中从测试用例访问应用程序委托时收到 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