[swift]不能在首页显示 JSON 结果上。VC 文本标签

标签: json ios Swift
发布时间: 2017/3/5 5:14:26
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想显示一个 Json 结果 (温度和湿度) 对我的视图控制器 (分别是 temperatureDisp 和 humidityDisp),但它似乎并不工作。

class HomeVC: UIViewController {

    @IBOutlet var usernameLabel: UILabel!

    @IBOutlet var temperatureDisp: UILabel!

    @IBOutlet var humidityDisp: UILabel!

    @IBAction func logoutTapped(sender: AnyObject) {
        let appDomain = NSBundle.mainBundle().bundleIdentifier
        NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain!)

        self.performSegueWithIdentifier("goto_login", sender: self)
    }


    override func viewDidAppear(animated: Bool) {
        let prefs:NSUserDefaults = NSUserDefaults.standardUserDefaults()
        let isLoggedIn:Int = prefs.integerForKey("ISLOGGEDIN") as Int
        if (isLoggedIn != 1) {
            self.performSegueWithIdentifier("goto_login", sender: self)
        } else {
            self.usernameLabel.text = prefs.valueForKey("USERNAME") as! NSString as String
        }

    }

    override func viewDidLoad() {
        super.viewDidLoad()

        var url2 : String = "http://admin:xxxxxxx@xxxxxx/xxxxx.fr/metrics2.php"
        var request2 : NSMutableURLRequest = NSMutableURLRequest()
        request2.URL = NSURL(string: url2)
        request2.HTTPMethod = "GET"
        NSURLConnection.sendAsynchronousRequest(request2, queue: NSOperationQueue(), completionHandler: {(response: NSURLResponse!,data: NSData!,error: NSError!) -> Void in
            var  error: AutoreleasingUnsafeMutablePointer<NSError?> = nil
            let jsonResult : NSArray! = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: error) as! NSArray
            if (jsonResult != nil) {
                println(jsonResult)

            } else {
                println("There is a problem")
            }

            var temperature = jsonResult[0].valueForKey("temperature") as! String
            var humidity = jsonResult[0].valueForKey("humidite") as! String

            println(temperature)
            println(humidity)


            self.humidityDisp.text = temperature

        })


    }


}}

这就是变量 jsonResult 的外观︰

(
        {
        Id = 117;
        date = "2015-04-06";
        humidite = "45.3";
        login = raspberrypi;
        luminosite = "\U00e9teinte";
        temperature = "18.4";
        time = "16:25:21";
    }
)

解决方法 1:

不知道你所说的"不工作",但从您的代码,我可以假设,至少,你并没有得到值你期望从你的 JSON 结果,但更有可能您的应用程序崩溃像疯了似的。 如果你想要编写的应用程序 Swift 你绝对必须明白件并学习如何正确地和他们一起工作。 读 Swift 编程语言— — 和彻底。 您的代码的当下,通过力展开使用 as! 和使用隐式打开类型 (那些跟随由 ! ) 你忽视件的整个概念和开放自己崩溃。

所以,假设没有网络或解析错误,并假定你解析 JSON 字符串具有数组作为其根对象,应该执行以下操作。 我已经采取打字和适当,展开你的变量,以及清理一些毫不相干的自由。

class HomeVC: UIViewController {

    @IBOutlet var usernameLabel: UILabel!
    @IBOutlet var temperatureDisp: UILabel!
    @IBOutlet var humidityDisp: UILabel!

    @IBAction func logoutTapped(sender: AnyObject) {
        if let appDomain = NSBundle.mainBundle().bundleIdentifier {
            NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
        }
        self.performSegueWithIdentifier("goto_login", sender: self)
    }

    override func viewDidAppear(animated: Bool) {
        let prefs = NSUserDefaults.standardUserDefaults()
        let isLoggedIn = prefs.boolForKey("ISLOGGEDIN")
        if isLoggedIn {
            self.performSegueWithIdentifier("goto_login", sender: self)
        } else {
            if let username = prefs.stringForKey("USERNAME") {
                self.usernameLabel.text = username
            }
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        var url2 = "http://admin:xxxxxxx@xxxxxx/xxxxx.fr/metrics2.php"
        var request2 = NSMutableURLRequest()
        request2.URL = NSURL(string: url2)
        request2.HTTPMethod = "GET"
        NSURLConnection.sendAsynchronousRequest(request2, queue: NSOperationQueue()) { (response: NSURLResponse!,data: NSData!,error: NSError!) in
            var parseError:NSError?

            if let data = data, let jsonResults = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &parseError) as? NSArray {

                println( jsonResults )

                if let result = jsonResults.firstObject as? [String : AnyObject] {
                    if let humidity = result["humidite"] as? String {
                        self.humidityDisp.text = humidity
                    }
                    if let temperature = result["temperature"] as? String {
                        self.temperatureDisp.text = temperature
                    }
                }
            } else {
                println("There is a problem: \(parseError)" )
            }
        }
    }
}
赞助商