PFQuery добавление данных в ячейки таблицы с помощью In In Loops - PullRequest
0 голосов
/ 28 октября 2019

У меня есть две версии кода. Версия 1 - это код, который я собираюсь использовать. Я пытаюсь найти друзей текущего пользователя в массиве друзей. Для каждого друга я хочу добавить определенные элементы в каждый массив для отображения в ячейке таблицы. Версия 1 включает в себя цикл for с массивом i friends, содержащий: ["magellan"]. Когда я использую PFQuery для поиска данных, он не выполняет запрос. Однако вторая версия не запускается в цикле for и не использует друга. Вместо этого он использует строку «magellan» и работает нормально. В чем моя проблема? Спасибо

Version 1: 
override func viewdidload() {
for i in 0..<friendsArray.count {
    friend = friendsArray[i]
    print(friend)
    let query2 = PFQuery(className: "CheckPost")
               query2.whereKey("Username", equalTo: friend)
               query2.findObjectsInBackground  (block: { (objects:[PFObject]?, error: Error?) in
                   if let objects = objects {
                       for object in objects {
                           self.checkArray.append(object["Checks"] as! String)
                           self.checkArrayobjectId.append(object.objectId!);
                           self.checkTimeArray.append(object["UserTime"] as! String)
                           //append userimage
                           self.checkPicArray.append(UIImage(named: "randomguy")!)
                           print("successfully checked for friends checks")

                       }
                   } else if error != nil {
                       print(error)
                   }
               })
    }
Version 2: 
override func viewdidload()
for i in 0..<friendsArray.count {
    friend = friendsArray[i]
    print(friend)

    }
 let query2 = PFQuery(className: "CheckPost")
               query2.whereKey("Username", equalTo: "magellan")
               query2.findObjectsInBackground  (block: { (objects:[PFObject]?, error: Error?) in
                   if let objects = objects {
                       for object in objects {
                           self.checkArray.append(object["Checks"] as! String)
                           self.checkArrayobjectId.append(object.objectId!);
                           self.checkTimeArray.append(object["UserTime"] as! String)
                           //append userimage
                           self.checkPicArray.append(UIImage(named: "randomguy")!)
                           print("successfully checked for friends checks")

                       }
                   } else if error != nil {
                       print(error)
                   }
               })
         }

1 Ответ

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

Похоже, вы неправильно понимаете асинхронное поведение функции findObjectInBackground. Эта функция асинхронная, и обратные вызовы будут вызываться только после завершения цикла. Ваш код должен работать с find. Как то так:

for i in 0..<friendsArray.count {
    friend = friendsArray[i]
    print(friend)
    let query2 = PFQuery(className: "CheckPost")
    query2.whereKey("Username", equalTo: friend)
    let objects = query2.find()
    if objects {
        for object in objects {
            self.checkArray.append(object["Checks"] as! String)
            self.checkArrayobjectId.append(object.objectId!);
            self.checkTimeArray.append(object["UserTime"] as! String)
            //append userimage
            self.checkPicArray.append(UIImage(named: "randomguy")!)
            print("successfully checked for friends checks")
         }
     }
}
...