网络请求不工作
Posted
技术标签:
【中文标题】网络请求不工作【英文标题】:Web Request do catch not working 【发布时间】:2016-11-14 20:34:52 【问题描述】:我想创建一个调用服务器并获取 JSON 信息的小应用程序。服务器返回的东西是这样的:
"temperature":23.60,"humidity":18.40
我的代码是这样的:
let requestURL: NSURL = NSURL(string: "http://esp_0b48a1:1337/")!
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(url: requestURL as URL)
let session = URLSession.shared
let task = session.dataTask(with: urlRequest as URLRequest)
(data, response, error) -> Void in
let httpResponse = response as! HTTPURLResponse
let statusCode = httpResponse.statusCode
if (statusCode == 200)
print("Everyone is fine, file downloaded successfully.")
do
let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String:AnyObject]
if let temp = json["temperature"] as? String
self.degrees.text = temp + "°C";
print(temp);
if let hum = json["humidity"] as? String
self.hum.text = hum + "%";
print(hum);
catch
print("error");
self.degrees.text = "no Temperature";
self.fill.text = "with";
self.degrees.text = "some errors like " + String(statusCode);
task.resume()
我正在 MainViewController 的 viewDidLoad 函数中执行它。 我得到输出“每个人都很好,文件 dl 成功”,但没有更多的输出。不是 do 块中的那个,也不是 catch 中的那个输出,它不会改变 UILabel。 但在我的 WebServer 上,我可以看到它收到了一个请求!
任何想法为什么? 我通过 http 连接并将 App Transport Security Settings 中的 Allow Arbitrary Loads 设置为 yes (info.plist)
dunklesToast
【问题讨论】:
您需要在主队列上调度 ui 更新,但我建议您在闭包中设置断点并逐步查看发生了什么。您的值似乎是浮点数而不是字符串,所以我的猜测是您的条件向下转换失败 【参考方案1】:铸造成一个浮动应该让你去。我建议添加一个 else 来处理铸造失败。
if let temp = json["temperature"] as? Float
self.degrees.text = temp + "\(temp)°C";
print(temp);
else
//handle this outcome
if let hum = json["humidity"] as? Float
self.hum.text = hum + "\(hum)°C";
print(hum);
else
//handle this outcome
【讨论】:
成功了!但我不得不将temp + "°C"
更改为"\(temp)°C"
,因为您不能使用+
将浮点数和字符串放在一起。谢谢!
是的!确实如此。以上是关于网络请求不工作的主要内容,如果未能解决你的问题,请参考以下文章