从 Parse Server Query 检索数据不起作用?
Data retrieval from Parse Server Query not working?
我正在尝试从包含字符串和图像的 Parse 服务器 table 检索所有行。这些中的每一个都将被映射到一个 swift 数组,然后在应用程序中使用。当我 运行 这段代码时,我对数组的附加会更新查询块范围内的计数,但一旦超出此代码块 - 我有一个初始化的空数组。
var langArray = [String]()
override func viewDidLoad() {
super.viewDidLoad()
let query = PFQuery(className:"Languages")
query.findObjectsInBackground { (objects, error) -> Void in
if error == nil {
for object in objects! {
self.langArray.append(object["name"] as! String)
print("inside this loop: \(self.langArray.count)")
}
} else {
print(error!)
}
print("outside the foreach loop: \(langArray.count)")
}
根据代码,我 运行 在 viewDidLoad() 中查询,所以它将是第一个被检索的东西。
所以您运行遇到的问题是异步调用。你是对的,viewDidLoad 是第一个调用的东西。问题是您的 query.findinbackgroundwithblock 是后台任务。这意味着只要网络允许,任务就会执行并完成。如果没有后台任务,代码通常会 运行 一行接一行。这个特定的调用告诉设备在继续之前不要等待它完成。这导致 "outside the for loop" println 在循环开始之前被调用。当数据从 parseserver 返回时,查询块中的代码将开始执行。这允许您在填充数组后打印出数组中的数据。如果你想用这段代码做一些除了打印之外的其他事情,你将需要更多的代码来剪断它。我的建议是在 viewDidLoad 之外创建一个方法,然后执行一些逻辑,使 for 循环在到达循环末尾时调用该函数。
我正在尝试从包含字符串和图像的 Parse 服务器 table 检索所有行。这些中的每一个都将被映射到一个 swift 数组,然后在应用程序中使用。当我 运行 这段代码时,我对数组的附加会更新查询块范围内的计数,但一旦超出此代码块 - 我有一个初始化的空数组。
var langArray = [String]()
override func viewDidLoad() {
super.viewDidLoad()
let query = PFQuery(className:"Languages")
query.findObjectsInBackground { (objects, error) -> Void in
if error == nil {
for object in objects! {
self.langArray.append(object["name"] as! String)
print("inside this loop: \(self.langArray.count)")
}
} else {
print(error!)
}
print("outside the foreach loop: \(langArray.count)")
}
根据代码,我 运行 在 viewDidLoad() 中查询,所以它将是第一个被检索的东西。
所以您运行遇到的问题是异步调用。你是对的,viewDidLoad 是第一个调用的东西。问题是您的 query.findinbackgroundwithblock 是后台任务。这意味着只要网络允许,任务就会执行并完成。如果没有后台任务,代码通常会 运行 一行接一行。这个特定的调用告诉设备在继续之前不要等待它完成。这导致 "outside the for loop" println 在循环开始之前被调用。当数据从 parseserver 返回时,查询块中的代码将开始执行。这允许您在填充数组后打印出数组中的数据。如果你想用这段代码做一些除了打印之外的其他事情,你将需要更多的代码来剪断它。我的建议是在 viewDidLoad 之外创建一个方法,然后执行一些逻辑,使 for 循环在到达循环末尾时调用该函数。