解析 - Xcode - 使用查询外部查询中的数据

Parse - Xcode - Using data from a Query outside of the Query

提问人:Kyle F. 提问时间:11/15/2022 更新时间:2/23/2023 访问量:38

问:

我对 Swift 和 Parse 相当陌生。我在查询时遇到问题。我无法让我的列表包含我的查询提供的数据。由于此问题,我无法将信息推送到已设置的选取器pickerData

这些是我声明的变量:

    var users = [PFObject]() //array to hold users
    var pickerData: [String] = [String]() //array to hold picker items

这就是我的问题出现的地方:

    override func viewDidLoad() {
        super.viewDidLoad()
        
        self.AssignToPicker.delegate = self
        self.AssignToPicker.dataSource = self

        // Do any additional setup after loading the view.
        
        let query = PFUser.query()
        query?.findObjectsInBackground(block: { users, error in
            if users != nil{
                self.users = users!
                for user in self.users {
                    self.pickerData.append(user["username"] as! String)
                }
                print("Printing contents of pickerData INSIDE of query:")
                for item in self.pickerData {
                    print(item)
                }
            }
        })
        
        print("printing content of pickerData outside of query:")
        for item in self.pickerData {
            print(item)
        }
    }

查询中的 for 循环为我提供了正确的信息。我的查询之外的 for 循环没有为我提供任何内容。如果我这样设置 pickerData,一切都会完美运行。但就像现在一样,当我在查询中加载我的时,它似乎在我离开它后被删除了pickerData = ["name1", "name2"]pickerData

我的问题的本质是如何获取此查询信息以保存在方法之外?findObjectsInBackground

Swift Xcode 解析平台

评论

0赞 HangarRash 11/15/2022
数据已保存。它只是比外部循环尝试访问它的时间晚一点,因为数据的加载是异步的。

答:

1赞 Kyle F. 2/23/2023 #1

该方法与文件的其余部分异步发生。这意味着它有点落后于其他一切。在查询中设置的数据仅在文件编译结束时才准备就绪。这意味着当你尝试做findObjectsInBackground

for item in self.pickerData {
            print(item)
        }

在查询之外,尚未填充 pickerData。

这是一个同步选项,但我不确定它是否对您的主题有益

let query = PFQuery(className: "yourClassName")
do {
    //synchronous
    let item = try query.getObjectWithId(yourIdHere)
} catch {
    print("error")
}

此查询同步发生。您保存的数据可以在之后立即使用item