Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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
Multithreading 从后台线程获取信息到Swift的主线程_Multithreading_Swift_Parsing_Background Process - Fatal编程技术网

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

Multithreading 从后台线程获取信息到Swift的主线程,multithreading,swift,parsing,background-process,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",

我似乎很难将全局队列中的信息获取到主队列中

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_队列更改UI,但我似乎在更新其他内容(例如数组)时遇到问题,如果我要在块外打印LN(hotelarray),则只会显示一个空数组


我理解这是因为主线程的加载速度明显快于后台线程加载数据所需的时间。让我感到困惑的是,似乎酒店阵列不会得到更新,无论在dispatch_get_main_队列中发生了什么,而UI相关的东西(如UILabels)也会相应地更新。非常感谢您的帮助

您所说的“我似乎在更新其他内容(如数组)时遇到问题”是什么意思。什么“麻烦”?什么“阵列”?你预计会发生什么?到底发生了什么?你怎么知道会发生这种情况呢?我的意思是,当我编写self.hotelarray.append(self.new)时,我希望后台线程加载完数据后更新hotel数组。所以我会在闭包之外写println(hotelarray),只会收到nil。然而,如果我对UILabel执行相同的操作,则在后台线程加载它的数据后,标签会相应地更改。您所描述的内容没有意义。如果
hotelarray
的类型是
[String]
,它看起来是这样的,那么它无法打印字符串“nil”,除非“name”本身可能是“nil”。您需要精确地(在您的问题中;注释太过有限)说明您实际如何测试它,以及它到底打印了什么(包括括号、引号、逗号等),但不确定在块外打印意味着什么。您必须在设置值后访问数组,即在块内(或在从块内调用的方法中)。@RobNapier我真的认为nil和空数组是一样的,但您是对的。对我的语法感到抱歉。印刷品实际上不是零而是空的。下次提问时,我会更彻底地记住。你所说的“我似乎在更新其他东西(如数组)时遇到问题”是什么意思。什么“麻烦”?什么“阵列”?你预计会发生什么?到底发生了什么?你怎么知道会发生这种情况呢?我的意思是,当我编写self.hotelarray.append(self.new)时,我希望后台线程加载完数据后更新hotel数组。所以我会在闭包之外写println(hotelarray),只会收到nil。然而,如果我对UILabel执行相同的操作,则在后台线程加载它的数据后,标签会相应地更改。您所描述的内容没有意义。如果
hotelarray
的类型是
[String]
,它看起来是这样的,那么它无法打印字符串“nil”,除非“name”本身可能是“nil”。您需要精确地(在您的问题中;注释太过有限)说明您实际如何测试它,以及它到底打印了什么(包括括号、引号、逗号等),但不确定在块外打印意味着什么。您必须在设置值后访问数组,即在块内(或在从块内调用的方法中)。@RobNapier我真的认为nil和空数组是一样的,但您是对的。对我的语法感到抱歉。印刷品实际上不是零而是空的。下次我问问题时,我会更仔细地记住这一点。