Swift主线程不起作用

时间:2015-12-15 17:25:40

标签: ios iphone swift

我正在尝试从服务器获取JSON数据后更新UILabel。我已经尝试了很多方法来修复它,但它仍然无效。

这是我的代码

class ShopInformation: UIViewController {
var latitude = String();
var longitude = String();
var shopInformation:JSON = nil;

@IBOutlet weak var name: UILabel!

@IBOutlet weak var addres: UILabel!
override func viewDidLoad() {

    super.viewDidLoad()
    let url = NSURL(string: "http://localhost/whatapro/json/shopinformation.php?latitude=\(self.latitude)&longitude=\(self.longitude)")

    let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {
        (data, response, error) in
        //                print(NSString(data: data!, encoding: NSUTF8StringEncoding))
        self.shopInformation = JSON(data: data!)
        print(self.shopInformation["response_data"][0])

        dispatch_async(dispatch_get_main_queue()) {

            self.name.text = self.shopInformation["response_date"][0]["name"].string
            self.addres.text = self.shopInformation["response_date"][0]["address"].string
        }

    }

    task.resume()
}
}

我也试过这种方式

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
        dispatch_async(dispatch_get_main_queue()) {
            self.name.text = self.shopInformation["response_date"][0]["name"].string
            self.addres.text = self.shopInformation["response_date"][0]["address"].string
        }
    }

谢谢

1 个答案:

答案 0 :(得分:1)

展开代码,将JSON中的值分解为单独的变量。在分配变量后设置断点,然后检查调试器中的值,并检查self.nameself.addres出口的值。

我的猜测是你的一个或两个网点没有连接。

(使用dispatch_async(dispatch_get_main_queue())的代码的第一个版本看起来是正确的。)