Получение строк, чисел и изображений из Parse Sever и добавление их в локальные массивы - PullRequest
1 голос
/ 16 октября 2019

Я новичок в кодировании, и я пытаюсь найти, извлечь и добавить значения с сервера разбора в локальные массивы. Посредством запроса я успешно могу получить всю информацию и добавить ее к своим массивам в ViewDidLoad () внутри моего цикла for in . Однако, когда я печатаю элементы массива после выполнения цикла запроса & for, все мои массивы содержат ноль, а не значения, которые были добавлены ранее.

  override func viewDidLoad() {
   query.whereKey("Bar", equalTo: BarText!)
    query.findObjectsInBackground(block: { (objects,error) -> Void in
        if error == nil {
        if let returnedobjects = objects {
            for object in returnedobjects {
                let postImageFile = object["PostImage"] as? PFFileObject

                postImageFile?.getDataInBackground(block: { (imageData: Data?, error: Error?) in
                    if error == nil {
                        self.PickedBarImagePostArray.append(UIImage(data: imageData!)!)
                    } else {
                        print("nothing")
                    }
                })
                let userProfilePicFile = object["ProfileImage"] as?
                PFFileObject
                userProfilePicFile?.getDataInBackground(block: { (imageData: Data?, error: Error?) in
                    if error == nil {
                        self.PickedBarPostProfileImageArray.append(UIImage(data: imageData!)!)
                    } else {
                        print("nothing")
                    }
                })

                self.PickedBarPostLikesArray.append((object["Likes"] as? Int)!)
                self.PickedBarPostUsernameArray.append((object["Username"] as? String)!)
                self.PickedBarPostTimeArray.append((object["UserTime"] as? String)!)
                self.PickedBarChekcedInArray.append((object["Checked"]as? String)!)
                self.PickedBarContentPostArray.append((object["ContentPost"] as? String)!)
                self.PickedBarPostArray.append((object["PostType"] as? String)!)
                print(self.PickedBarPostLikesArray)
                print(self.PickedBarPostUsernameArray)
                print(self.PickedBarPostTimeArray)
                print(self.PickedBarChekcedInArray)
                print(self.PickedBarContentPostArray)
                print(self.PickedBarPostArray)
            }
        }
    }
})
    print(self.PickedBarPostLikesArray)
    print(self.PickedBarPostUsernameArray)
    print(self.PickedBarPostTimeArray)
    print(self.PickedBarChekcedInArray)
    print(self.PickedBarContentPostArray)
    print(self.PickedBarPostArray)
    self.BarSelectedTableView.reloadData()

}

Я получаю это в консоли:

[]

[]

[]

[]

[]

[10]

["magellan"]

["17:59"]

["\" \ ""]

["\" \ ""]

Это мой Parse Server

Ответы [ 3 ]

0 голосов
/ 17 октября 2019

Итак, я заставил его работать, создав кнопку «Обновить». Все работает правильно. Тем не менее, я хотел бы, чтобы информация заполняла массив при первоначальном просмотре, а не при нажатии кнопки. Кто-нибудь может объяснить, почему это происходит?

0 голосов
/ 17 октября 2019

Это потому, что код перезагрузки вызывается до завершения завершения.

0 голосов
/ 16 октября 2019

Ваш код перезагрузки вызывается до завершения завершения. Поместите код перезагрузки в закрытие, попробуйте это

 override func viewDidLoad() {
 query.whereKey("Bar", equalTo: BarText!)
query.findObjectsInBackground(block: { (objects,error) -> Void in
    if error == nil {
    if let returnedobjects = objects {
        for object in returnedobjects {
            let postImageFile = object["PostImage"] as? PFFileObject

            postImageFile?.getDataInBackground(block: { (imageData: Data?, error: Error?) in
                if error == nil {
                    self.PickedBarImagePostArray.append(UIImage(data: imageData!)!)
                } else {
                    print("nothing")
                }
            })
            let userProfilePicFile = object["ProfileImage"] as?
            PFFileObject
            userProfilePicFile?.getDataInBackground(block: { (imageData: Data?, error: Error?) in
                if error == nil {
                    self.PickedBarPostProfileImageArray.append(UIImage(data: imageData!)!)
                } else {
                    print("nothing")
                }
            })

            self.PickedBarPostLikesArray.append((object["Likes"] as? Int)!)
            self.PickedBarPostUsernameArray.append((object["Username"] as? String)!)
            self.PickedBarPostTimeArray.append((object["UserTime"] as? String)!)
            self.PickedBarChekcedInArray.append((object["Checked"]as? String)!)
            self.PickedBarContentPostArray.append((object["ContentPost"] as? String)!)
            self.PickedBarPostArray.append((object["PostType"] as? String)!)

           self.Reload()

        }
    }
}

 })



}

  func Reload(){

   self.BarSelectedTableView.reloadData()
  print(self.PickedBarPostLikesArray)
print(self.PickedBarPostUsernameArray)
print(self.PickedBarPostTimeArray)
print(self.PickedBarChekcedInArray)
print(self.PickedBarContentPostArray)
print(self.PickedBarPostArray)


  } 
...