另一个完成执行后运行解析代码

时间:2019-07-10 19:33:02

标签: ios swift xcode parse-platform concurrency

我正在尝试查询要删除的具有特定ID的一类对象。但是,当我运行它时,出现“此查询具有出色的网络连接。您必须等待完成” 的错误。我认为这是因为我在尝试访问对象时仍试图删除它。

我在闭包中提供了删除代码,因为我假设闭包语句仅在函数调用完成后才执行,但是仍然给我错误。我也尝试过使用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中的ID相关联的每个对象都将从“解析”后端中删除。但是,似乎getObjectInbackground()和deleteInBackground()发生冲突。如果有人可以提供一些建议,那就太好了!

1 个答案:

答案 0 :(得分:0)

您可以尝试

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!)