2016-04-20 5 views
1

Ich versuche, das MVC-Muster zu verwenden, und ich habe die Alamofire-API verwendet, um die Antwort als JSON-Daten zu erhalten. Ich bin nicht in der Lage, die Daten zu senden, um die Tabellenansicht von meinem Modell zu aktualisieren. Helfen Sie mir, meine Tabelle mit den JSON-Werten zu aktualisieren.Wie kann ich die (JSON) -Werte des Modells an den View-Conroller senden?

Das ist mein API:

class func showData(completionHandler:(model)->()){ 
     var arrRes = [[String:AnyObject]]() 
     Alamofire.request(.GET, "http://api.androidhive.info/contacts/").responseJSON { (req, res, json) -> Void in 
     let swiftyJsonVar = JSON(json.value!) 
     if let resData = swiftyJsonVar["contacts"].arrayObject { 
      arrRes = resData as! [[String:AnyObject]] 
      print(arrRes) 
      if arrRes.count > 0 { 
      let name = swiftyJsonVar["contacts"]["name"].stringValue 
      let email = swiftyJsonVar["contacts"]["email"].stringValue 

       let detail = model(name: name, email: email) 
       completionHandler(detail) 

      } 
      } 
     } 
} 

dies mein Controller ist:

class model: NSObject { 
     var name:String! 
     var email:String! 
    init(name:String , email:String){ 
     super.init() 
     self.name = name 
     self.email = email 
     } 
    } 

das ich habe nur die Tableview und zwei Etiketten sind:

@IBOutlet var appsTableView: UITableView! 
    var tableData:[model] = [model]() 


    override func viewDidLoad() { 
    super.viewDidLoad() 

    self.appsTableView.reloadData() 
    self.appsTableView.backgroundColor = UIColor.orangeColor() 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = appsTableView.dequeueReusableCellWithIdentifier("MyTestCell") as! newTabelcell 
    let dict = self.tableData[indexPath.row] 
    cell.name.text = dict.name 
    cell.mailid.text = dict.email 
    return cell 
} 

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

func configureTableView() { 
    appsTableView.rowHeight = UITableViewAutomaticDimension 
    appsTableView.estimatedRowHeight = 100.0 
    self.appsTableView.reloadData() 
} 

dies mein Modell ist eingefügt in die Zelle, ein Label für die Anzeige von JSON-Namen und andere für die Anzeige von JSON-E-Mail.

Antwort

0

Ich denke, dass Sie ein Problem bekommen, weil ich mit diesem gearbeitet habe und ich rief Unterschied von Ihrem Anruf, das ist, wie ich Alamofire verwenden:

Alamofire.request(.GET, "http://api.androidhive.info/contacts/").responseJSON { (responseData) -> Void in 
      switch responseData.result { 
      case .Success(let value): 
       let swiftyJsonVar = JSON(value) 
       // You can adjust here, because I didn't use Contact Model in my Project. 
       if let resData = swiftyJsonVar["contacts"].arrayObject { 
        self.arrRes = resData as! [[String:AnyObject]] 
       } 
       if self.arrRes.count > 0 { 
        self.tblJSON.reloadData() 
       } 
      case .Failure(let error): 
       print(error.description) 
      } 
     } 

Sie mein Projekt 11 bei https://github.com/khuong291/Swift_Example_Series (Projekt herunterladen). Ich habe das Laden von JSON in tableView beendet.

0

Dies ist meine bearbeitete API-Klasse mit der itunessearch-Methode.

func itunesSearch(completionHandler:(songData)->()) { 

    Alamofire.request(.GET, "http://itunes.apple.com/search?", parameters: ["term" : "tamil new songs", "media" : "music"]) 
     .responseJSON { (request, response, json) in 

       let json = JSON(json.value!) 
       if let jsonData = json["results"].arrayObject { 
       self.array = jsonData as! [[String : AnyObject]] 
       for num in 1...5{ 
       let arraydata = json["results"][num] 
        //print([arraydata]) 
       let artistid = arraydata["artistId"].stringValue 
       let trackname = arraydata["trackName"].stringValue 

       let song = songData(country: artistid , currency: trackname) // The parameter name country and currency of this method is just defined in the model class.Don't get confuse by those names which is just reference. 
       completionHandler(song) } 
      } 
     } 
} 

Es ist genau das, für mich zu arbeiten ..