从 Parse 检索到所有响应时执行操作

Perform action when all responses are retrieved from Parse

我有两个模型,从 PFObject 继承:

** 一个配方模型

class Recipe: PFObject, PFSubclassing{
  class func parseClassName() -> String {
    return "Recipe"
  }

 @NSManaged var name: String?
 var toIngredients: PFRelation! {
   return relationForKey("ingredients")
 }
}

** 成分模型:

class Ingredient: PFObject, PFSubclassing{
  class func parseClassName() -> String {
      return "Ingredient"
  }
  @NSManaged var category: String?
  @NSManaged var ingredient: String?
  @NSManaged var amount: NSNumber?
  @NSManaged var unit: String?
}

我发现获取单个食谱的原料会像这样工作:

 let query = recipe.toIngredients.query()
 query.findObjectsInBackgroundWithBlock{....

我的问题是我有一系列食谱,我需要从中获取配料。 我需要组合多个异步响应以在另一个控制器中使用。我需要获取整个成分列表,然后执行 perfromSegueWithIdentifier。

我发现了这个 Whosebug post:

这是使用 Parse 和 PFRelation 的正确方法吗?

基本上你需要并行执行多个任务,并在所有任务完成时得到通知。如果你使用 findObjectsInBackground() which returns a BFTask. Once you have the array of tasks, you can send them for execution in parallel (more details here):

就可以做到这一点
let tasks = recipes.map { [=10=].toIngredients.query().findObjectsInBackground() }
let aggregateTask = BFTask(forCompletionOfAllTasks: tasks)
aggregateTask.continueWithBlock { task in
    if task.error() { 
        // handle the error
    } else {
       // grab the results, perform the seque
    }
}