我有以下的代码片段,我有一些设备崩溃:Swift:Downcast导致应用程序崩溃,为什么?
Crashed: com.apple.root.default-qos
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x00000000cbd
代码:
var obj:AnyObject = command.arguments[0] as AnyObject!
var theData:AnyObject = obj["getContactImagesByEmails"] as AnyObject!
if let contactImagesByEmails:AnyObject = obj["emails"]{
if contactImagesByEmails is Array<String>{
/*line 176*/ let array:Array<String> =
contactImagesByEmails as Array<String> // CRASH happens here
results = WmSqliteImagesModel.getInstance.getImagesByEmailAsWmContactImage(array) as Dictionary<String,AnyObject>
}
}
完整的堆栈跟踪
Thread : Crashed: com.apple.root.default-qos
0 libswiftCore.dylib 0x0000000100559794 swift_unknownRetain + 32
1 MyApp 0x000000010017c8a0 MyApp.Plugin.(getContactImagesByEmails (MyApp.Plugin) -> (ObjectiveC.CDVInvokedUrlCommand) ->()).(closure #1) (Plugin.swift:176)
2 MyApp 0x000000010017c8a0 MyApp.Plugin.(getContactImagesByEmails (MyApp.Plugin) -> (ObjectiveC.CDVInvokedUrlCommand) ->()).(closure #1) (Plugin.swift:176)
3 MyApp 0x00000001001790b0 partial apply forwarder for reabstraction thunk helper from @callee_owned() -> (@unowned()) to @callee_owned (@in()) -> (@out()) with unmangled suffix "125" (Plugin.swift:62)
4 MyApp 0x0000000100179120 partial apply forwarder for reabstraction thunk helper from @callee_owned (@in()) -> (@out()) to @callee_owned() -> (@unowned()) with unmangled suffix "128" (Plugin.swift:62)
5 libdispatch.dylib 0x00000001937e13ac _dispatch_call_block_and_release + 24
6 libdispatch.dylib 0x00000001937e136c _dispatch_client_callout + 16
7 libdispatch.dylib 0x00000001937ed40c _dispatch_root_queue_drain + 1152
8 libdispatch.dylib 0x00000001937ee75c _dispatch_worker_thread3 + 108
9 libsystem_pthread.dylib 0x00000001939bd2e4 _pthread_wqthread + 816
的Plugin.swift:176
点到:
let array:Array<String> = contactImagesByEmails as Array<String>
我想念什么吗?我认为这个代码应该是安全的。
如果contactImagesByEmails is Array<String>
返回true
,为什么contactImagesByEmails as Array<String>
失败?
请帮帮忙,
[编辑]
command
有型的CDVInvokedUrlCommand
@interface CDVInvokedUrlCommand : NSObject {
NSString* _callbackId;
NSString* _className;
NSString* _methodName;
NSArray* _arguments;
}
你期望'var obj:AnyObject = command.arguments [0]作为AnyObject!'做什么?我可以看到它是如何编译的,但我无法想象它如何做到有用。投射到“AnyObject!”是一个非常奇怪的沮丧。 – 2015-02-10 20:15:36
@RobNapier'obj [“getContactImagesByEmails”]'返回可选的,所以我解开它,并承诺'theData'不是'nil',否则它会在之前崩溃。我该如何写这个? – snaggs 2015-02-10 20:17:46
你真正期望'command.arguments [0]'是什么类型?你期望它是一个字典吗?它是一个字典吗?什么类型是'命令?' – 2015-02-10 20:18:27