嗨,我尝试找到一种在SWIFT中解析JSON的方法,这对我来说很有用,但我遇到了问题。
我让用户输入用于JSON URL的用户名->如果用户键入有效的用户名,则一切正常。
但是,如果他输入了错误的用户名,我的解析也会失败,但这也是正确的,但是目前我的应用程序只崩溃了,我正在寻找一种解决方法。
这是我的代码崩溃的地方,
let url0 = NSURL(string: newUrlPath!)
let session0 = NSURLSession.sharedSession()
let task0 = session0.dataTaskWithURL(url0!, completionHandler: {data, response, error -> Void in
if (error != nil) {
println(error)
} else {
let summonorID_JSON = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary
Xcode错误
Error Domain = NSURLErrorDomain代码= -1002“操作无法完成。(NSURLErrorDomain错误-1002。)” UserInfo = 0x7c12d610 {NSErrorFailingURLKey = XX,NSErrorFailingURLStringKey = XX,NSUnderlyingError = 0x7c12c8d0“操作无法完成。(( kCFErrorDomainCFNetwork错误-1002。)“}致命错误:在展开可选值时意外发现nil
一切都很好,因为这是我从请求中获得的返回页
是的,他不能将其解析为NSDirectory,因为它没有返回的JSON(通常是这样),因此有一种方法可以确保如果出现此页面(因此用户输入了错误的用户名),我可以退出我的循环/采取其他方式;)?
您正在使用许多可能全部失败的操作,而Swift对于失败完全是无法原谅的。如果newURLPath为nil,而url0为nil,则代码将崩溃,因为newURLPath不是有效的URL。
因此,您的URL请求可能返回错误(请求本身失败),但是您遇到URL请求成功但给出意外结果(不是JSON字典)的情况。您的代码结尾为“ as NSDictionary”,告诉Swift:“我知道我可能没有字典,但是将得到的内容转换为字典,如果不起作用,则会崩溃”。只需将其更改为
if let parsedJSON = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil)
{
// Will still crash if the server sends a valid JSON array
let summonorID_JSON = parsedJSON as NSDictionary
}
else
{
// data wasn't valid JSON, handle it.
}
区别在于,将接受JSON解析器返回的可选值,而不会崩溃,并且您检查是否收到了有效的JSON。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句