从 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)")
        }


根据代码,我 运行 在 vi​​ewDidLoad() 中查询,所以它将是第一个被检索的东西。

所以您运行遇到的问题是异步调用。你是对的,viewDidLoad 是第一个调用的东西。问题是您的 query.findinbackgroundwithblock 是后台任务。这意味着只要网络允许,任务就会执行并完成。如果没有后台任务,代码通常会 运行 一行接一行。这个特定的调用告诉设备在继续之前不要等待它完成。这导致 "outside the for loop" println 在循环开始之前被调用。当数据从 parseserver 返回时,查询块中的代码将开始执行。这允许您在填充数组后打印出数组中的数据。如果你想用这段代码做一些除了打印之外的其他事情,你将需要更多的代码来剪断它。我的建议是在 viewDidLoad 之外创建一个方法,然后执行一些逻辑,使 for 循环在到达循环末尾时调用该函数。