【问题标题】:Data retrieval from Parse Server Query not working?从 Parse Server Query 检索数据不起作用?
【发布时间】:2020-02-13 13:45:32
【问题描述】:

我试图从包含字符串和图像的 Parse 服务器表中检索所有行。然后将其中的每一个映射到一个 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() 中运行查询,因此它将是第一个被检索的内容。

【问题讨论】:

  • 你能贴出你用来访问数组的代码吗?我怀疑您遇到了异步数据的问题。您可能在服务器返回数据之前调用了数组。
  • 所以数组被设置为一个变量,我将返回的数据附加到。它在作为第一行代码提供的 sn-p 中。
  • 是的,我可以看到,我的问题是你说“一旦在这个代码块之外 - 我有一个初始化的空数组。”你能发布你的代码来展示这个发现吗?
  • 添加了打印语句,以查看我在将数据填充到数组时得到了什么

标签: ios swift mongodb parse-platform


【解决方案1】:

所以您遇到的问题是异步调用。你是正确的 viewDidLoad 是第一件事。问题是您的 query.findinbackgroundwithblock 是后台任务。这意味着只要网络允许,任务就会执行并完成。如果没有后台任务,代码通常会一行接一行地运行。这个特定的调用告诉设备在继续之前不要等待它完成。这会导致在循环开始之前调用您的“for 循环之外” println。当从 parseserver 返回数据时,查询块内的代码将开始执行。这允许您在填充数组后打印出数组中的数据。如果您尝试使用此代码执行其他操作,而不仅仅是打印,您将需要更多的代码剪断它。我的建议是在 viewDidLoad 之外创建一个方法,然后执行一些逻辑,使 for 循环在循环结束时调用该函数。

【讨论】:

  • 啊,是的! “背景”!我认为我试图检索的数据足够小,因此它不应该滞后于最终用户!非常感谢你抓住这个!
  • 很高兴为您提供帮助,如果您遇到更多问题,请发布新问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-27
相关资源
最近更新 更多