【问题标题】:Swift main thread doesn't workSwift 主线程不起作用
【发布时间】:2016-03-21 14:55:36
【问题描述】:

我在从服务器获取 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
        }
    }

谢谢

【问题讨论】:

  • 您的标签在何时何地初始化?
  • 另一点包括@Wezly 提到的内容是,您是否检查了从网络请求中收到的值?
  • 我更新了代码。对于数据,我可以从服务器检索它
  • 您可能想描述它是如何工作的,并包括您收到的任何相关错误消息。
  • 没有错误。只是 UILabel 没有更新

标签: ios iphone swift


【解决方案1】:

扩展您的代码,将JSON 中的值分解为一个单独的变量。分配变量后设置断点,然后检查调试器中的值,并检查self.nameself.addresoutlets 的值。

我的猜测是你的一个或两个插座没有连接。

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

【讨论】:

    猜你喜欢
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多