Получение данных из Parse Server Query не работает? - PullRequest
2 голосов
/ 16 октября 2019

Я пытаюсь извлечь все строки из таблицы сервера Parse, которая содержит строки и изображения. Каждый из них будет затем сопоставлен с быстрым массивом и затем использован в приложении. Когда я запускаю этот код, мое добавление к массиву обновляет счетчик в области блока запроса, но когда-то за пределами этого блока кода - у меня есть пустой массив, который был инициализирован.


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 (), так что это будет первое извлечение.

1 Ответ

1 голос
/ 29 октября 2019

Таким образом, проблема, с которой вы сталкиваетесь, заключается в асинхронных вызовах. Вы правы, viewDidLoad - это первое, что вызывается. Проблема в том, что ваш query.findinbackgroundwithblock является фоновой задачей. Это означает, что задача будет выполняться и завершаться всякий раз, когда позволяет сеть. Без фоновой задачи код обычно запускается одна строка за другой. Этот конкретный вызов говорит устройству не ждать его завершения, прежде чем двигаться дальше. Это приводит к тому, что println «вне цикла for» будет вызываться еще до того, как ваш цикл начнется. Когда данные возвращаются из parseserver, код внутри блока запроса начнет выполняться. Это позволяет распечатывать данные в массиве после его заполнения. Если вы пытаетесь сделать что-то еще с этим кодом, кроме печати, вам понадобится больше кода. Я предлагаю создать метод вне viewDidLoad, а затем выполнить некоторую логику, которая заставляет цикл for вызывать функцию, когда она достигает конца цикла.

...