【问题标题】:Running Parse code after another has finished execution在另一个完成执行后运行 Parse 代码
【发布时间】:2019-11-20 11:32:56
【问题描述】:

我正在尝试查询要删除的具有特定 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?) ...
    } 
}

我希望从 Parse 后端删除与原始 IdList 中的 ID 关联的每个对象。但是,似乎 getObjectInbackground() 和 deleteInBackground() 发生冲突。如果有人可以提供一些建议,那就太好了!

【问题讨论】:

  • 没试过但是能不能把let query = PFQuery(className: "Pictures")放到for循环里面看看是否还有错误?

标签: ios swift xcode parse-platform concurrency


【解决方案1】:

你可以试试

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

【讨论】:

  • 您好,感谢您回复我!我将您的递归方法与 DispatchGroups 一起使用来处理批量删除,并且能够获得有效的解决方案。
  • @TamNguyen - 如果答案有效 - 请将答案标记为正确。点击向上箭头。
猜你喜欢
  • 2018-01-26
  • 2013-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 2018-11-27
  • 2014-09-28
  • 1970-01-01
相关资源
最近更新 更多