如何将模型的(json)值发送到视图控制器?

Posted

技术标签:

【中文标题】如何将模型的(json)值发送到视图控制器?【英文标题】:How can I send the (json)values of model to the view conroller? 【发布时间】:2016-04-20 10:26:33 【问题描述】:

我正在尝试使用 MVC 模式,并使用 Alamofire API 将响应作为 json 数据获取。我无法发送数据以从我的模型更新表格视图。帮助我用 json 值更新我的表格。

这是我的 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)

            
            
        

这是我的控制器:

 @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()

这是我的模型:

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

我只有表格视图,并且在单元格中插入了两个标签;一个标签用于显示 json 名称,另一个用于显示 json 电子邮件。

【问题讨论】:

【参考方案1】:

我认为您会遇到一些问题,因为我之前曾使用过此功能,并且与您的通话有所不同,这就是我使用 Alamofire 的方式:

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)
            
        

你可以在https://github.com/khuong291/Swift_Example_Series (Project 11) 下载我的项目。我已经将 JSON 加载到 tableView 了。

【讨论】:

【参考方案2】:

这是我编辑的具有 itunessearch 方法的 API 类。

    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)   
             
        
 

这对我很有效..

【讨论】:

以上是关于如何将模型的(json)值发送到视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

将 json 传递给视图模型时保持安全

是否可以将模型数据从视图发送到不是该视图的控制器的控制器?

如何通过包含表单数据但不单击提交按钮的 ajax 将视图模型发送到控制器

如何发送纯 JSON 对象(位于模型对象内)以在 Spring Boot 中查看?

如何快速将一个视图控制器值发送到另一个视图控制器表视图?

如何将模型值从视图传递到控制器?