ios – 在Swift中捕获NSJSONSerialization错误

ios – 在Swift中捕获NSJSONSerialization错误,第1张

概述我试图理解为什么我无法捕捉到NS JSONSerialization引发的错误. 我希望引发和捕获NSInvalidArgumentException异常,但应用程序崩溃. 使用Xcode 8在Swift 3和Swift 2.3中都会发生这种情况. 斯威夫特3: do { _ = try JSONSerialization.data(withJSONObject: ["bad in 我试图理解为什么我无法捕捉到NS JSONSerialization引发的错误.

我希望引发和捕获NSinvalidargumentexception异常,但应用程序崩溃.

使用Xcode 8在Swift 3和Swift 2.3中都会发生这种情况.

斯威夫特3:

do {        _ = try JsONSerialization.data(withJsONObject: ["bad input" : NSDate()])    }    catch {        print("this does not print")    }

Swift 2.3:

do {        _ = try NSJsONSerialization.dataWithJsONObject(["bad input" : NSDate()],options: NSJsONWritingOptions())    }    catch {        print("this does not print")    }

此代码放在applicationDIDFinishLaunching一个空白的Xcode项目中.在模拟器和设备上进行测试.

完全例外:

*** Terminating app due to uncaught exception 'NSinvalidargumentexception',reason: 'InvalID type in JsON write (__NSDate)'

任何想法为什么catch块没有捕获这个特定的错误?

解决方法 从JsONSerialization数据的文档(withJsONObject:options :):

If obj will not produce valID JsON,an exception is thrown. This exception is thrown prior to parsing and represents a programming error,not an internal error. You should check whether the input will produce valID JsON before calling this method by using isValIDJsONObject(_:).

这意味着您无法捕获由无效数据导致的异常.只有“内部错误”(无论实际意味着什么)才能在catch块中捕获.

要避免可能的NSinvalidargumentexception,您需要使用isValIDJsONObject.

然后你的代码变成:

do {    let obj = ["bad input" : NSDate()]    if JsONSerialization.isValIDJsONObject(obj) {        _ = try JsONSerialization.data(withJsONObject: obj)    } else {        // not valID - do something appropriate    }}catch {    print("Some vague internal error: \(error)")}
总结

以上是内存溢出为你收集整理的ios – 在Swift中捕获NSJSONSerialization错误全部内容,希望文章能够帮你解决ios – 在Swift中捕获NSJSONSerialization错误所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1094884.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存