【发布时间】:2020-06-04 14:58:50
【问题描述】:
Crashed: com.apple.main-thread
0 libswiftCore.dylib 0x19db65dd4 _swift_stdlib_bridgeErrorToNSError + 36
1 0x101005410 closure #2 in closure #1 in MCRegistrationViewController.requestForVerificationCode() + 229 (MCRegistrationViewController.swift:229)
2 0x10105e2d0 thunk for @escaping @callee_guaranteed (@guaranteed NSURLSessionDataTask, @guaranteed Error) -> () + 4339360464 (<compiler-generated>:4339360464)
3 0x100f956f8 __68-[BoomAPIClient callSuccessBlock:failureBlock:forTask:withResponse:]_block_invoke + 522 (BoomAPIClient.m:522)
4 libdispatch.dylib 0x19042d610 _dispatch_call_block_and_release + 24
5 libdispatch.dylib 0x19042e184 _dispatch_client_callout + 16
6 libdispatch.dylib 0x1903e01d0 _dispatch_main_queue_callback_4CF$VARIANT$mp + 1044
7 CoreFoundation 0x1906de3c4 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 12
8 CoreFoundation 0x1906d93b8 __CFRunLoopRun + 2004
9 CoreFoundation 0x1906d88bc CFRunLoopRunSpecific + 464
10 GraphicsServices 0x19a543328 GSEventRunModal + 104
11 UIKitCore 0x19476d6d4 UIApplicationMain + 1936
12 0x100fba224 main + 5 (main.m:5)
13 libdyld.dylib 0x190563460 start + 4
我尝试将 swift Error 转换为 Objective C NSError ,但在执行时遇到了崩溃。
if let convertedError = error as NSError? {
}
谢谢 尼基
【问题讨论】:
-
你尝试不投射,你确定这是一个 NSError 而不是一个错误?
-
@JoakimDanielson 基本上我需要从错误中获取用户信息字典,为此我需要将错误类型转换为 NSError,错误没有用户信息对象
-
如果
convertedError是Error,它应该毫无问题地桥接到NSError。它是一个Error,否则不会调用bridgeErrorToNSError。还有其他一些故障,但如果没有更多上下文,就无法判断。顺便说一句,你为什么要转换成 optionalNSError? -
@JoakimDanielson 实际上我正在尝试从 AFNetworking 中的故障块中提取序列化响应,error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] 但它大部分时间都可以工作,但有时它会崩溃并且很难重现
-
@AndreasOetjen 是的,我同意,这是场景,我有用目标 c 编写的网络层(返回 NSError),并且在另一个快速视图控制器中调用了相同的网络函数(完成块有Error ),在这里我尝试将 Error 类型转换为 NSError 。抛出bridgeErrorToNSError。我尝试了没有任何可选的常规类型转换方法,但它在大多数情况下也会崩溃,但有时它会崩溃并且难以重现