为什么我不能从Parse中检索对象并将其存储在数组中?

时间:2019-06-12 20:59:52

标签: swift parse-server

我想检索这些对象并将它们存储在数组中。

当我在函数内部打印时,一切正常。但是,在外部打印时,数组为空。

我尝试过不使用该功能,但在堆栈溢出时遵循了一个答案,但仍然不知道发生了什么。

override func viewDidLoad() {
        super.viewDidLoad()

    func getAllInfoFromParse () {
        let query = PFQuery(className:"UserQRCodes")
            query.whereKey("userName", equalTo: PFUser.current()!)
            query.findObjectsInBackground { (results, error) in
                if let error = error {
                    print(error.localizedDescription)
                } else if let results = results {
                    for object in results {
                        if let userInfo = object["info"] as? String {

                            self.infoTakenFromUsersParse.append(userInfo)
                            print(self.infoTakenFromUsersParse)
                    }
                }
            }
        }
    }


    getAllInfoFromParse ()
    print(self.infoTakenFromUsersParse)
    self.infoTakenFromUsersParseWithoutDups = self.infoTakenFromUsersParse.removingDuplicates()
    print("The info from parse is here \(self.infoTakenFromUsersParseWithoutDups)")
    print("The info from parse is here \(self.infoTakenFromUsersParse)")
    print(self.imageFiles)
    print(imageFiles)
    print(imageFiles)

Console:

logged in
[]
The info from parse is here []
The info from parse is here []
[]
[]
[]
[]
["Coffee Shop"]


该数组用于填充tableView。我在做什么错了?

1 个答案:

答案 0 :(得分:0)

您不必再次查询每个单独的项目。这些对象应该在原始响应中。您还需要确保在第3行上查询的用户名是实际用户的用户名,而不是实际用户对象。最后,根据您的评论,您似乎需要某种回调函数来告知请求何时完成执行,因此请将其添加到getInfoFromParse函数中。尝试这样的事情:

func getInfoFromParse(callback: () -> Void) {
    let query = PFQuery(className:"UserQRCodes")
    query.whereKey("userName", equalTo: PFUser.current()!)
    query.findObjectsInBackground { (results, error) in
        if let error = error {
            print(error.localizedDescription)
        } else if let results = results {
            for object in results {
                if let userInfo = object["info"] as? String {
                    self.infoTakenFromUsersParse.append(userInfo)
                }
            }
            self.myTableView.reloadData()
            callback()
        }
    }
}

编辑:然后,当您准备访问此函数的结果时,请执行以下操作:

getInfoFromParse {
    print(self.infoTakenFromUsersParse)
}