提问人:Kyle F. 提问时间:11/15/2022 更新时间:2/23/2023 访问量:38
解析 - Xcode - 使用查询外部查询中的数据
Parse - Xcode - Using data from a Query outside of the Query
问:
我对 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
答:
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
评论