Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在swift的UI中显示JSON_Ios_Json_Swift - Fatal编程技术网

Ios 如何在swift的UI中显示JSON

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:

我尝试在iPhone上调整我的Android应用程序,但当我要求我的服务器获取JSON对象时,我出现了一个致命错误:

致命错误:在展开可选值时意外发现nil

我想我的故事板中的文本字段初始化不好,或者别的什么,但是我找不到我的错误

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答案