я следующие фрагменты кода, где у меня есть аварии на некоторых устройствах: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
The Plugin.swift:176
точка по:
let array:Array<String> = contactImagesByEmails as Array<String>
Пропустить что-нибудь? Я думаю, что этот код должен быть безопасным.
если contactImagesByEmails is Array<String>
возвращает true
, почему contactImagesByEmails as Array<String>
не удается?
Пожалуйста, помогите,
[EDIT]
command
имеет тип CDVInvokedUrlCommand
@interface CDVInvokedUrlCommand : NSObject {
NSString* _callbackId;
NSString* _className;
NSString* _methodName;
NSArray* _arguments;
}
Что вы ожидаете? Var obj: AnyObject = command.arguments [0] как AnyObject! 'Делать? Я вижу, как он компилируется, но я не могу себе представить, как он делает что-нибудь полезное. Кастинг в 'AnyObject!' - очень странный downcast. –
@RobNapier 'obj [" getContactImagesByEmails "]' возвращает Необязательно, поэтому я развожу его и обещаю, что 'theData' не' nil', иначе он будет аварийно завершен. Как мне это написать? – snaggs
Какой тип вы действительно ожидаете 'command.arguments [0]' быть? Вы ожидаете, что это словарь? Это словарь? Какой тип 'command?' –