无法将“NSError”(0x264bd90)类型的值转换为“NSString”

Posted

技术标签:

【中文标题】无法将“NSError”(0x264bd90)类型的值转换为“NSString”【英文标题】:Could not cast value of type 'NSError' (0x264bd90) to 'NSString' 【发布时间】:2017-05-03 13:35:20 【问题描述】:

因此,当我尝试运行此代码并发生错误时,我遇到了崩溃。我不知道如何正确地做到这一点。

这是我的功能:

 @IBAction func MobilePay(_ sender: Any) 
        let payment = MobilePayPayment(orderId: "123456", productPrice: 10.0)
        //No need to start a payment if one or more parameters are missing
        if (payment != nil) && ((payment?.orderId.characters.count)! > 0) && ((payment?.productPrice)! >= 0) 
            MobilePayManager.sharedInstance().beginMobilePayment(with: payment!, error:  (Error) in
                print(Error)
                self.alert(message: Error as! String)
            )
        
    

还有我的错误日志:

Error Domain=com.danskebank.mobilepay Code=1001 "无法打开 MobilePay 应用" UserInfo=NSLocalizedFailureReason=MobilePay 应用未安装, NSLocalizedRecoverySuggestion=请安装 MobilePay 应用并重试。, NSLocalizedDescription=无法打开打开移动支付应用 (0x264d6b8)。 (lldb)

似乎打印工作并且打印了错误,但是我得到了最后一行

(0x264d6b8)。 (lldb)

我该如何解决?

【问题讨论】:

调用局部变量Error 会造成混淆,因为有一个同名的协议。除此之外:是什么让您认为可以将错误转换为字符串? error.localizedDescription 可能就是你想要的。 【参考方案1】:

试试Error对象的localizedDescription属性,像这样:

self.alert(message: Error.localizedDescription)

Error Domain=com.danskebank.mobilepay Code=1001 "无法打开 MobilePay 应用程序" UserInfo=NSLocalizedFailureReason=MobilePay 应用程序不是 已安装, NSLocalizedRecoverySuggestion=请安装 MobilePay 应用 再试一次。, NSLocalizedDescription=无法打开 MobilePay app 无法将“NSError”(0x264bd90)类型的值转换为“NSString” (0x264d6b8)。 (lldb)

【讨论】:

以上是关于无法将“NSError”(0x264bd90)类型的值转换为“NSString”的主要内容,如果未能解决你的问题,请参考以下文章

无法将类型 (PFUser!, NSError) void 的值转换为预期的参数类型 PFUserResultBlock

无法转换类型的值'(数据:CMAccelerometerData!,错误:NSError!)

无法将类型“(UIViewController?,NSError?)-> Void”的值分配给类型“((UIViewController?,错误?)-> Void)?”

Swift 2 到 Swift 3:无法将类型 '(Data?, NSError?) -> Void' 的值转换为预期的参数类型 'GTMSessionFetcherCompletionHand

无法创建 NSError:无法识别的选择器

无法使用类型为 (('WeatherResponse?, NSError?) -> Void 的参数列表调用“responseObject”