从后台线程获取信息到Swift的主线程

时间:2015-07-21 00:19:42

标签: multithreading swift parsing background-process

我似乎在从全局队列中获取信息到主队列时遇到了一些麻烦。

override func viewDidLoad() {
    super.viewDidLoad()

    dispatch_async(dispatch_get_global_queue(Int(QOS_CLASS_USER_INTERACTIVE.value), 0)) {
        let query = PFQuery(className: "VenueData")
        query.whereKey("name", equalTo: "Sedona")
        var object = query.findObjects()
        if let myObject = object as? [PFObject] {
            for x in myObject {
                var hotelLabel: String? = x.objectForKey("name") as? String
                println(hotelLabel)
                dispatch_async(dispatch_get_main_queue()) {
                    self.new = hotelLabel!
                    self.hotelarray.append(self.new)
                }
            }
        }
    }
}

即使我能够通过dispatch_get_main_queue更改UI,我似乎无法更新其他内容(例如数组),如果我要在块外部打印(hotelarray),只会显示一个空数组。

我理解这是因为mainthread的加载速度明显快于后台线程加载数据所需的时间。让我感到困惑的是,无论dispatch_get_main_queue内部发生了什么,似乎酒店数组都不会得到更新,而UILabels等UI相关内容会相应更新。任何帮助是极大的赞赏。

0 个答案:

没有答案