0

PFObject からサブクラス化した 2 つのモデルがあります。

** レシピモデル

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{....

私の問題は、材料を入手する必要があるレシピの配列があることです。複数の非同期応答を組み合わせて、別のコントローラーで使用する必要があります。成分のリスト全体を取得してから、SegueWithIdentifier を実行する必要があります。

このstackoverflowの投稿を見つけました:AlamofireとSwiftからの複数の非同期応答の確認

これは Parse と PFRelation を使用するための正しいアプローチですか?

4

1 に答える 1

1

基本的に、複数のタスクを並行して実行する必要があり、それらすべてが完了すると通知されます。を返すfindObjectsInBackground()を使用すると、これを実現できますBFTask。タスクの配列を取得したら、それらを並行して実行するために送信できます (詳細はこちら)。

let tasks = recipes.map { $0.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
    }
}
于 2016-01-06T14:15:08.103 に答える