Почему я не могу получить объекты из Parse и сохранить в массиве? - PullRequest
0 голосов
/ 12 июня 2019

Я хочу получить эти объекты и сохранить их в массиве.

Когда я печатаю внутри функции, все работает нормально.Однако при печати снаружи массивы пусты.

Я пробовал без функции и следовал за ответом по переполнению стека, но все еще не знаю, что происходит.

override func viewDidLoad() {
        super.viewDidLoad()

    func getAllInfoFromParse () {
        let query = PFQuery(className:"UserQRCodes")
            query.whereKey("userName", equalTo: PFUser.current()!)
            query.findObjectsInBackground { (results, error) in
                if let error = error {
                    print(error.localizedDescription)
                } else if let results = results {
                    for object in results {
                        if let userInfo = object["info"] as? String {

                            self.infoTakenFromUsersParse.append(userInfo)
                            print(self.infoTakenFromUsersParse)
                    }
                }
            }
        }
    }


    getAllInfoFromParse ()
    print(self.infoTakenFromUsersParse)
    self.infoTakenFromUsersParseWithoutDups = self.infoTakenFromUsersParse.removingDuplicates()
    print("The info from parse is here \(self.infoTakenFromUsersParseWithoutDups)")
    print("The info from parse is here \(self.infoTakenFromUsersParse)")
    print(self.imageFiles)
    print(imageFiles)
    print(imageFiles)

Console:

logged in
[]
The info from parse is here []
The info from parse is here []
[]
[]
[]
[]
["Coffee Shop"]


Массивзаполнить табличное представление.Что я делаю не так?

1 Ответ

0 голосов
/ 13 июня 2019

Вам не нужно запрашивать каждый отдельный элемент снова. Эти объекты должны быть в исходном ответе. Вам также необходимо убедиться, что имя пользователя, к которому вы обращаетесь в строке 3, относится к реальному имени пользователя, а не к реальному объекту пользователя. И наконец, на основании ваших комментариев кажется, что вам нужна какая-то функция обратного вызова, чтобы определить, когда запрос завершен, поэтому добавьте это в функцию getInfoFromParse. Попробуйте что-то вроде этого:

func getInfoFromParse(callback: () -> Void) {
    let query = PFQuery(className:"UserQRCodes")
    query.whereKey("userName", equalTo: PFUser.current()!)
    query.findObjectsInBackground { (results, error) in
        if let error = error {
            print(error.localizedDescription)
        } else if let results = results {
            for object in results {
                if let userInfo = object["info"] as? String {
                    self.infoTakenFromUsersParse.append(userInfo)
                }
            }
            self.myTableView.reloadData()
            callback()
        }
    }
}

РЕДАКТИРОВАТЬ: Затем, когда вы будете готовы получить доступ к результатам этой функции, выполните что-то вроде этого:

getInfoFromParse {
    print(self.infoTakenFromUsersParse)
}
...