【问题标题】:JSON fatal error: unexpectedly found nil while unwrapping an Optional valueJSON 致命错误:在展开可选值时意外发现 nil
【发布时间】:2016-09-29 16:43:15
【问题描述】:

我不太清楚为什么会收到此错误。是否有一些我没有检查的可选值或我缺少的某种选项

func getJSON(){

    let url = NSURL(string: myURL)
    let request = NSURLRequest(url: url! as URL)
    let session = URLSession(configuration: URLSessionConfiguration.default)
    let task = session.dataTask(with: request as URLRequest) { (data,response,error) -> Void in

        if error == nil {

            let swiftyJSON = JSON(data:data!)

            let theTitle = swiftyJSON["results"].arrayValue

            for title in theTitle{

                let titles = title["title"].stringValue
                print(titles)
            }


        } else{
            print("Error")
        }
    }
    task.resume()
}

【问题讨论】:

  • 你在哪里得到这个错误,哪一行?
  • 您的命名(复数 - 多个项目 theTitle 和单数 - 一个项目 titles)非常令人困惑。由于您使用的是 Swift 3,因此有 URLURLRequest
  • 错误在请求行:let request = NSURLRequest(url: url! as URL)
  • 那么 URL 是错误的并且强制解包 url! 会导致错误。

标签: json swift swifty-json


【解决方案1】:

如果错误是当您强制解包时 url 为 nil,那么这意味着在它之前的行中,您创建 url 您已经在 myURL 中传递了一个实际上不能出于某种原因,被解析为NSURL 对象。

打印出myURL 看看它是什么。我敢打赌它的格式不正确。

顺便说一句,无论如何你都不应该强行打开包装。试试这样的:

guard let url = NSURL(string: myURL) else {
  print("Couldn't parse myURL = \(myURL)")
  return
}

let request = NSURLRequest(url: url as URL)  // <-- No need to force unwrap now.

【讨论】:

  • 哇,非常感谢。展开包装就像某种安全网吗?
  • 不完全是。在某些情况下,您需要说:“不,真的,相信我,我知道我在做什么”,但在大多数情况下,如果您有一个可选的,您需要在使用前正确打开它。最简单的方法是使用guard let foo = someOptionalif let foo = someOptional
  • 非常感谢。我是 swift 新手,所以这很有帮助
  • @NickBalistreri 你应该看到stackoverflow.com/questions/32170456/… 并阅读Apple 的“The Swift Programming Language”一书的相关部分。
猜你喜欢
  • 1970-01-01
  • 2016-01-26
  • 2016-02-29
  • 2020-09-19
  • 2016-01-08
相关资源
最近更新 更多