2017-05-21 19 views
0

成分を入力して入力に基づいてレシピを返すアプリケーションを構築しています。私はalamofireを使用してAPIへの呼び出しを行っており、これらは成功しているようです。私が抱えている問題は、テストコールの6つの結果が、別々のセルですべての結果を返すのではなく、1回レシピを6回繰り返していることです。これは私のモデルであるAPIコールの同じ結果を配列に出力する

import Alamofire 

class RecipeAp: NSObject{ 

var concoctions = [RecipeDetails]() 

func provideRecipeDetailsForName(name: String, completed:@escaping ([RecipeDetails]) -> Void) { 
    let urlSearchString = URL_FULL + "onion" + "soup" 
    Alamofire.request(urlSearchString).responseJSON(completionHandler: { response in 
     let details = RecipeDetails() 
     let result = response.result 
     if let dict = result.value as? Dictionary<String, AnyObject> { 

      if let matches = dict["matches"] as? [[String: Any]] { 
       for ingredient in matches { 
        if let name = ingredient["ingredients"] as? [String] { 
         details.ingredients = name 
         self.concoctions.append(details) 

        } 
       } 

       for recipeName in matches { 
        if let name = recipeName["recipeName"] as? String { 
         details.recipeTitle = name 
         print("the recipe name = \(name.debugDescription)") 
         self.concoctions.append(details) 

        } 

       } 

      } 

      completed(self.concoctions) 

     } 



    }) 

} 

} 

:これは、APIの呼び出しコードである

class RecipeDetails: NSObject { 
    var recipeID: String? 
    var recipeImageURL: String? 
    var recipeTitle: String? 
    var recipeSourceURL: String? 
    var recipePublisher: String? 
    var ingredients: [String]? 
} 

これは私のcustomCellセットアップ

import UIKit 

class RecipeListCustomCell: UITableViewCell { 


@IBOutlet weak var recipeTitle: UILabel! 
@IBOutlet weak var recipeUrl: UILabel! 

var recipe: RecipeDetails? { 

    didSet { 

     updateView() 

    } 

} 

func updateView() { 

    recipeTitle.text = recipe?.recipeTitle 
    recipeUrl.text = recipe?.recipeSourceURL 


    } 

} 

され、最終的に、これは私のViewControllerです

import UIKit 

class MainVC: UIViewController { 

@IBOutlet weak var tableView: UITableView! 

var recipe = RecipeAp() 
var results = [RecipeDetails]() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    loadRecipes() 

} 


    func loadRecipes() { 

    recipe.provideRecipeDetailsForName(name: "onion" + "soup") { (response) in 

     self.results = response 
     self.tableView.reloadData() 

    } 

    } 

} 

extension MainVC: UITableViewDataSource { 

func tableView(_ tableView: UITableView, numberOfRowsInSection 
section: Int) -> Int { 
    return results.count 
} 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: 
    IndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCell(withIdentifier: 
    "RecipeListCustomCell", for: indexPath) as! RecipeListCustomCell 
    let recipe = results[indexPath.row] 
    cell.recipe = recipe 

    return cell 


    } 

} 

セルごとにすべてのレシピを個別に表示する方法がわかりません。また、APIとシミュレータの表示から戻ってくるものについて、いくつかのスクリーンショットを添付しました。

simulator output

result back from Api

+0

あなたはTeamViewerのか、ズームセッションを行うことができますか? –

答えて

0

あなたは、各応答のためRecipeDetailsのインスタンスを1つだけ作成します。したがって、正確に同じ参照をself.concoctionsに繰り返し追加します。あなたはこのような何か書く必要があるかもしれ

:私はあなたを助けることができるように

func provideRecipeDetailsForName(name: String, completed: @escaping ([RecipeDetails]) -> Void) { 
    let urlSearchString = URL_FULL + "onion" + "soup" 
    Alamofire.request(urlSearchString).responseJSON(completionHandler: { response in 
     let result = response.result 
     if let dict = result.value as? Dictionary<String, AnyObject> { 

      if let matches = dict["matches"] as? [[String: Any]] { 
       for match in matches { 
        //### Create a new instance for each iteration. 
        let details = RecipeDetails() 
        if let ingredients = match["ingredients"] as? [String] { 
         details.ingredients = ingredients 
        } 
        if let recipeName = match["recipeName"] as? String { 
         details.recipeTitle = recipeName 
         print("the recipe name = \(recipeName.debugDescription)") 
        } 
        //### Add the instance once in the iteration 
        self.concoctions.append(details) 
       } 
      } 

      completed(self.concoctions) 
     } 
    }) 
} 
+0

ああ、もちろん、このことがありがとう、問題を解決してくれてありがとう –

関連する問題