我对从 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/