【发布时间】:2016-03-08 15:48:10
【问题描述】:
我是 Swift 2.0 的新手,但我有 OOP 语言方面的经验。我试图通过 JSON API 在标签中显示城市的名称。但我不断收到错误“EXC_BAD_INSTRUCTION”和“Unwrapping nil”错误。我认为问题可能出在 URL 中。因为我尝试过使用另一个 API,radnomuser.me/api,所以我得到了没有错误的结果。有人可以引导我解决问题,因为我在互联网上得到了很多答案,而且所有答案都不一样。如果您不理解我的问题,请随时提问,因为我认为这是至关重要的部分。 谢谢!
@IBOutlet weak var viaSegueTextView: UITextView!{
var viaSegue = ""
override func viewDidLoad() {
super.viewDidLoad()
getWeatherData()
}
//////////////////////////////////////////////////////////////////////////
func getWeatherData {
let endpoint = NSURL(string: "http://api.openweathermap.org/data/2.5/weather?q=London,uk&appid=44db6a862fba0b067b1930da0d769e98")
let data = NSData(contentsOfURL: endpoint!)
do {
if let json: NSDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary {
if let name = json["name"] as? String
{
viaSegueLabel.text = "\(name)"
}
}
}catch let error as NSError{
print("\(error)")
}
}
}
【问题讨论】:
-
解析和阅读都很好。您的
viaSegueLabel为零。我在 Playground 中尝试了您的下载/解析 sn-p,它解析得很好。也为下一次 - 不要永远发布您的应用程序 ID、登录名等... -
感谢您的提示,它只是测试应用程序,只是读取 JSON 并显示数据,但我明白您的意思。我还是不明白。我知道我有 nil,这意味着我没有从 JSON 中获得价值。出于某种原因,它在“if”之前停止,viaSequeLabel 为 nil,因为它没有解析它,或者因为 URL 错误或其他原因?感谢您的回复。
-
这不是问题,但
JSONObjectWithData不返回可选,因此可选绑定是无用的。写let json = try NSJSONSerialization.JSONObjectWithData(jsonData, options: []) as! [String:AnyObject],如果发生错误会执行catch块 -
@vadian 你能推荐我用什么吗?