dataTask 在展开可选值时意外发现 nil
Posted
技术标签:
【中文标题】dataTask 在展开可选值时意外发现 nil【英文标题】:dataTask Unexpectedly found nil while unwrapping an Optional value 【发布时间】:2020-03-24 01:41:21 【问题描述】:我正在构建一个只使用 Web 服务的应用程序。为此,我使用了方法 dataTask (URLSession.shared.dataTask)。
我不是在等待信息,只是用下一个代码触发了一个进程:
let endPoint = "http://host/service
let url = URL(string: endPoint)
let task = URLSession.shared.dataTask(with: url!) _, _, _ in
task.resume()
当方法 dataTask 执行时,Xcode 显示错误:
“线程 1:致命错误:在展开可选值时意外发现 nil”
有没有办法跳过返回completionHandler(数据、响应、错误)?
【问题讨论】:
显示您的端点 url 字符串值。您需要正确地对字符串进行百分比编码。 ***.com/a/43668198/2303865的可能重复 【参考方案1】:需要完成处理程序,但不必在创建数据任务对象时指定。在这种情况下,您必须定义一个处理响应的 URLSessionDataDelegate。
“一个 URLSession 对象不需要有委托。如果没有分配委托,当您在该会话中创建任务时,您必须提供一个完成处理程序块来获取数据。
完成处理程序块主要用作使用自定义委托的替代方案。如果您使用采用完成处理程序块的方法创建任务,则不会调用响应和数据传递的委托方法。” (https://developer.apple.com/documentation/foundation/urlsessiondatadelegate)。
至于崩溃,它似乎与声明任务时使用的强制展开(!符号)有关。如果发生此错误,您可以使用保护条件安全中止。
guard let url = URL(string: endPoint) else return
URLSession.shared.dataTask(with: url) _, _, _ in
.resume()
【讨论】:
谢谢@folverap 我可以解决这个问题。有没有办法调试或检查 dataTask 是否运行?如果我在浏览器或邮递员中执行我的 WebService,则该响应正常,但是当我尝试在我的代码中执行时,什么也没有发生。 您为此使用了完成块(Data?, URLResponse?, Error?)。如果 Error 不为零,则请求失败。如果成功,errir 将为 nil,并且您的 Data 对象不应为 nil。以上是关于dataTask 在展开可选值时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire 平面错误:在展开可选值时意外发现 nil