Выполнение кода разбора за другим завершением выполнения - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь запросить класс объектов с определенными идентификаторами для удаления. Однако, когда я запускаю его, я получаю сообщение об ошибке «Этот запрос имеет неподтвержденное сетевое соединение. Вы должны подождать, пока он не будет выполнен» . Я предполагаю, что это потому, что я пытаюсь удалить объект, пока я все еще к нему обращаюсь.

Я предоставил код удаления в замыкании, потому что я предполагаю, что операторы замыкания выполняются только после завершения вызова функции, но все равно выдает ошибку. Я также пытался использовать DispatchGroups, потому что это кажется проблемой параллелизма, но я еще не слишком знаком с их использованием. Вот мой код:

let idList = [...] // Some list of ID's I would like to remove

let query = PFQuery(className: "Pictures")

for id in idList {
    query.getObjectInBackground(withId: id) { (object: PFObject?, error: 
Error?) in
    if error == nil {
        img?.deleteInBackground() { (success, error: Error?) ...
    } 
}

Я ожидаю, что каждый объект, связанный с идентификатором в моем исходном списке IdList, будет удален из серверной части Parse. Однако, похоже, что getObjectInbackground () и deleteInBackground () конфликтуют. Если бы кто-нибудь мог дать совет, это было бы замечательно!

1 Ответ

0 голосов
/ 10 июля 2019

Вы можете попробовать

var idList = [...]

func delete(_ id:Int) {
     query.getObjectInBackground(withId: id) { (object: PFObject?, error: Error?) in
           if error == nil {
              img?.deleteInBackground() { (success, error: Error?) ...
           }

          idList  = Array(idList.dropFirst())
          if !idList.isEmpty {
            delete(idList.first!)
          }
    } 
}

Сначала назовите это как

delete(idList.first!)
...