ios - 如何提取 JSON 数据以在 swift 2.0 的 UITableView 中动态应用?

标签 ios json swift uitableview

我对从 JSON 解析数据感到困惑。实际上,我提取了整个数据。但我很困惑如何将它应用于 TableView 行。那么,如何提取 JSON 数据并将其应用于动态 tableView 行?非常感谢。

URL 中的 JSON 数据如下,

{
  "main_result": "1",
  "event_listing": [
    {
      "event_details": "Omega Events",
      "pdf_url": "http://portal.shineevents.co.in/portal/assets/uploads/pdf/",
      "modified_date": "2016-06-22 14:17:02"
    },
    {
      "event_details": "Cobra Events",
      "pdf_url": "http://portal.shineevents.co.in/portal/assets/uploads/pdf/",
      "modified_date": "2016-06-22 14:17:18"
    },
    {
      "event_details": "Kovai Events",
      "pdf_url": "http://portal.shineevents.co.in/portal/assets/uploads/pdf/",
      "modified_date": "2016-06-22 14:23:45"
    }
  ]
}

我试过的代码

import UIKit

class ViewController: UIViewController, UITableViewDataSource,UITableViewDelegate{

    var labels = ["Taylor Swift","Eminem","Avlirl","Michael"] /* i use dummy array now*/

    @IBOutlet var tableView: UITableView!


    override func viewDidLoad() {
        super.viewDidLoad()
        retrieveDataFromJASON()
    }

    func retrieveDataFromJASON()
    {
        let URL = NSURL(string: "http://portal.shineevents.co.in/portal/api_load/app_load_call")
        let requestURL = NSMutableURLRequest(URL: URL!)
        requestURL.HTTPMethod = "POST"

        let postString = "api=event_list"

        requestURL.addValue("123456", forHTTPHeaderField: "X-API-KEY")
        requestURL.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)

        let task = NSURLSession.sharedSession().dataTaskWithRequest(requestURL) { data, response, error in

            guard error == nil && data != nil else {
                print("error=\(error)")

                return

            }

            if let httpStatus = response as? NSHTTPURLResponse where httpStatus.statusCode != 200 {

                print("statusCode should be 200, but is \(httpStatus.statusCode)")

                print("response = \(response)")


            }

            let responseString2 = try! NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)

            print(responseString2) /*prints whole JSON Data*/


            let events = responseString2["event_listing"] as? [[String: AnyObject]]

            for eventName in events!
            {
                print(eventName["event_details"])

                /* Prints:
                    Optional(Omega Events)
                    Optional(Cobra Events)
                    Optional(Kovai Events)  // How to print only First event only
                */

            }
        }

        task.resume()
    }

    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return labels.count  // How to use event_details.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! TableCell
        cell.titles.text = labels[indexPath.row]  // how to use event_details[indexPath.row]
        return cell
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }    
}

最佳答案

您需要声明类型为 [[String: AnyObject]] 的实例变量,并将其与 UITableViewDelegate 方法一起使用,如下所示

var events : [[String: AnyObject]] = [[String: AnyObject]]()

现在在收到响应时初始化此事件对象,然后重新加载 tableView

self.events = responseString2["event_listing"] as? [[String: AnyObject]]
self.tableView.reloadData()

现在将这个events 对象与UITableView 方法一起使用

func numberOfSectionsInTableView(tableView: UITableView) -> Int {
    return 1
}

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return events.count  // How to use event_details.count
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = self.tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! TableCell
    cell.titles.text = events[indexPath.row]["event_details"] as? String 
    return cell
}    

关于ios - 如何提取 JSON 数据以在 swift 2.0 的 UITableView 中动态应用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38586989/

相关文章:

ios - 我能得到 CATransform3DIdentity 的基本解释吗?

php - JSON 中的 foreach 函数只返回一行

c# - C#中的JSON解码

javascript - 在 Swift 中使用 JavaScript 交互和提交 HTML 表单

swift - 显示日期和时间

html - 对象在 iphone 中没有占据全宽

ios - 如何在不看到第一个的情况下以模态方式推送两个 View Controller

ios - TabBarController 的 NSNotification

android - 当我想在 java servlet 中访问他时,从 android 应用程序发送的 JSON 对象为空

ios - 针对特定集合的多对多关系核心数据查询