如何在 swift 2.0 中提取 JSON 数据以在 UITableView 中动态应用?
Posted
技术标签:
【中文标题】如何在 swift 2.0 中提取 JSON 数据以在 UITableView 中动态应用?【英文标题】:How to extract JSON Data to apply Dynamically in UITableView in swift 2.0? 【发布时间】:2016-07-26 10:10:22 【问题描述】:我对从 JSON 解析数据感到困惑。实际上,我提取了整个数据。但我很困惑如何将它应用于表视图行。那么,如何提取 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()
【问题讨论】:
【参考方案1】:您需要声明[[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
【讨论】:
哇!伟大的 Nirav 先生。感谢您的明确解释。谢谢很多:) :) 欢迎小伙伴快乐编码:) 嗨,Nirav 先生,我需要更多帮助。以及我在我的代码上更新您的答案。当我单击按钮时,tableView 打开。但是表格视图没有显示任何数据。之后,我按下表视图中的任意位置,然后表视图显示检索到的 JSON 数据的行数。我该如何解决? 请更新新代码,以便我了解您面临的问题。 更新此问题或添加新帖子并在此处给我新帖子的链接【参考方案2】:您可以通过将其转换为 NSData 来获取 JSON 数据。请检查我的答案:How to save JSON data from a POST Request into dictionary with Swifty Json?
一旦你有了字典,你就可以轻松解析它。看到这个:http://tech.ustwo.com/2014/08/01/ios-swift-dictionaries/
您还应该在 tableview 上创建自己的单元格,以便将属性添加到单元格中。按照本教程进行操作:https://www.raywenderlich.com/129059/self-sizing-table-view-cells
希望对您有所帮助。
【讨论】:
你好。发布链接并不是一个好的答案。您可以使用代码和解释发布问题的实际答案,或者如果您认为问题已经有答案,则可以将问题标记为“重复”。谢谢。 其实这个答案似乎不错。但我无法理解。因为,我不知道 Objective-C 并且我不知道如何使用你的方法来解决我的问题。无论如何感谢Firats先生的回复:) :) :D :D 哦,好吧好吧!再次感谢您的意见。重复均值?已经在stack over flow上问过了啊?或者这个问题有答案了,不用回答啊? @MohanSingh Duplicate 的意思是“这个问题已经有了答案”。这是因为 SO 不希望有重复的内容,因此用户可以在看到问题后立即将问题标记为重复,而不是一次又一次地回答相同的问题。 哦,好的。因为我只知道几个英文单词!我会努力改进我的答案。以上是关于如何在 swift 2.0 中提取 JSON 数据以在 UITableView 中动态应用?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 swift 2.0 制作 http post json 请求参数
JSON:使用 Alamofire 和 Swift 3 提取数据