Ios 如何在swift的UI中显示JSON
我尝试在iPhone上调整我的Android应用程序,但当我要求我的服务器获取JSON对象时,我出现了一个致命错误: 致命错误:在展开可选值时意外发现nil 我想我的故事板中的文本字段初始化不好,或者别的什么,但是我找不到我的错误Ios 如何在swift的UI中显示JSON,ios,json,swift,Ios,Json,Swift,我尝试在iPhone上调整我的Android应用程序,但当我要求我的服务器获取JSON对象时,我出现了一个致命错误: 致命错误:在展开可选值时意外发现nil 我想我的故事板中的文本字段初始化不好,或者别的什么,但是我找不到我的错误 print(jsonResult)为我提供了良好的JSON,但在我出现致命错误之后 import UIKit class ViewController: UIViewController { @IBOutlet weak var labelCategory:
print(jsonResult)
为我提供了良好的JSON,但在我出现致命错误之后
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var labelCategory: UILabel!
@IBOutlet weak var imageViewOneTrash: UIImageView!
@IBOutlet weak var textFieldCoordinate: UITextField!
@IBOutlet weak var textFieldAddress: UITextField!
@IBOutlet weak var buttonShare: UIButton!
@IBOutlet weak var buttonCoppy: UIButton!
@IBOutlet weak var buttonDelete: UIButton!
@IBOutlet weak var buttonMaps: UIButton!
@IBOutlet weak var addressTxtFld: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// 1
let urlAsString = "http://www.website.sample"
let url = NSURL(string: urlAsString)!
let urlSession = NSURLSession.sharedSession()
//2
let jsonQuery = urlSession.dataTaskWithURL(url, completionHandler: { data, response, error -> Void in
if (error != nil) {
print(error!.localizedDescription)
}
// 3
do{
if let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? [String:AnyObject] {
print(jsonResult)
// 4
let jsonAddress: String! = jsonResult["trash_temp_address"] as! String
dispatch_async(dispatch_get_main_queue(), {
self.addressTxtFld.text = jsonAddress
})
}
}catch let error as NSError {
print(error.localizedDescription)
}
})
// 5
jsonQuery.resume()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
打印(jsonResult)
的结果是:
["result": <__NSArrayM 0x15d62770>(
{
"cat_name" = Mobilier;
"country_name" = France;
"town_name" = Toulon;
"town_postal_code" = 83200;
"trash_temp_address" = "278-338 Chemin du Jonquet";
"trash_temp_date_time" = "2016-05-22 17:49:14";
"trash_temp_fk_category" = 2;
"trash_temp_id" = 99;
"trash_temp_img" = "/pics/IMG_20160622_174846.jpg.png";
"trash_temp_latitude" = "43.1395197";
"trash_temp_longitude" = "5.9106404";
}
)
]
[“结果”:(
{
“cat_名称”=移动电话;
“国家名称”=法国;
“城镇名称”=土伦;
“城镇邮政编码”=83200;
“垃圾箱临时地址”=“278-338 Chemin du Jonquet”;
“垃圾桶温度日期时间”=“2016-05-22 17:49:14”;
“垃圾箱临时fk类别”=2;
“垃圾箱温度id”=99;
“垃圾箱温度img”=“/pics/img\u 20160622\u 174846.jpg.png”;
“垃圾温度纬度”=“43.1395197”;
“垃圾箱温度经度”=“5.9106404”;
}
)
]
第一个可能的崩溃可能发生在这里:
let jsonAddress: String! = jsonResult["trash_temp_address"] as! String
self.addressTxtFld.text = jsonAddress
尽量避免隐式展开选项。此外,text
属性已经是可选的。所以我们可以写:
let jsonAddress = jsonResult["trash_temp_address"] as? String
下一次崩溃可能发生在这里:
let jsonAddress: String! = jsonResult["trash_temp_address"] as! String
self.addressTxtFld.text = jsonAddress
如果序列图像板或nib文件中未连接地址txtfld
插座。要修复它,请写以下内容
self.addressTxtFld?.text = jsonAddress
另外,这些建议修复了可能发生的碰撞。但这不是错误的逻辑。对于新信息(JSON结构),显然逻辑是错误的@瓦迪安给了你一个正确解析逻辑的例子。第一个可能的崩溃可能发生在这里:
let jsonAddress: String! = jsonResult["trash_temp_address"] as! String
self.addressTxtFld.text = jsonAddress
尽量避免隐式展开选项。此外,text
属性已经是可选的。所以我们可以写:
let jsonAddress = jsonResult["trash_temp_address"] as? String
下一次崩溃可能发生在这里:
let jsonAddress: String! = jsonResult["trash_temp_address"] as! String
self.addressTxtFld.text = jsonAddress
如果序列图像板或nib文件中未连接地址txtfld
插座。要修复它,请写以下内容
self.addressTxtFld?.text = jsonAddress
另外,这些建议修复了可能发生的碰撞。但这不是错误的逻辑。对于新信息(JSON结构),显然逻辑是错误的@瓦迪安给了你一个正确解析逻辑的例子。- 根对象是一个带有一个键的字典
result
- key
的值是一个字典数组result
垃圾桶\u temp\u地址的值
if let jsonRootObject = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [String:AnyObject] { // mutable containers are not needed
print(jsonRootObject)
if let jsonResult = jsonRootObject["result"] as? [[String:String]],
jsonAddress = jsonResult[0]["trash_temp_address"] {
dispatch_async(dispatch_get_main_queue()) {
self.addressTxtFld.text = jsonAddress
}
}
...
- 根对象是一个带有一个键的字典
result
- key
result
的值是一个字典数组
这将获取键垃圾桶\u temp\u地址的值
if let jsonRootObject = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [String:AnyObject] { // mutable containers are not needed
print(jsonRootObject)
if let jsonResult = jsonRootObject["result"] as? [[String:String]],
jsonAddress = jsonResult[0]["trash_temp_address"] {
dispatch_async(dispatch_get_main_queue()) {
self.addressTxtFld.text = jsonAddress
}
}
...
您的打印(jsonResult)
显示一个带有结果
键的对象和一个数组,其中一个对象具有的“垃圾桶临时地址”
您可以访问以下内容:
let result = jsonResult["result"] as! [AnyObject]
let resultObj = result[0] as! [String: AnyObject]
let jsonAddress = resultObj["trash_temp_address"] as! String
(您可能需要纠正这一点,因为我没有在Xcode中尝试它)您的打印(jsonResult)
显示一个带有结果
键的对象和一个数组,其中一个对象具有的“垃圾桶临时地址”
您可以访问以下内容:
let result = jsonResult["result"] as! [AnyObject]
let resultObj = result[0] as! [String: AnyObject]
let jsonAddress = resultObj["trash_temp_address"] as! String
(您可能需要更正此错误,因为我没有在Xcode中尝试此错误)您从哪里得到此错误,哪一行?我没有行号,我将json放在我的问题中您从哪里得到此错误,哪一行?我没有行号,我将json放在我的问题中“let jsonAddress=jsonResult[“trash\u temp\u address”]作为?字符串”删除致命错误,但当我打印(jsonAddress)时,它会打印nilyes。因为jsonResult
正在包装字典。我更新了我的答案,并建议将@vadian answer“让jsonAddress=jsonResult[“trash_temp_address”]as?String”视为删除致命错误,但当我打印(jsonAddress)时,它会打印nilyes。因为jsonResult
正在包装字典。我更新了我的答案,并建议查看@vadian答案