【问题标题】:parse JSON data from a URL and display on table view从 URL 解析 JSON 数据并显示在表格视图上
【发布时间】:2016-01-05 16:19:00
【问题描述】:

这就是数据在 URL 中的放置方式

{
"studentsinfo": [
    {
            "id": "100",
            "name": "Adam",
            "email": "adam@example.com",
            "address": "House #33, ABC Lane, ABC CITY 06987",
            "gender" : "male",
            "phone": {
                "mobile": "+1 1234567890",
                "home": "00 123456",
                "office": "00 321654"
            }
    },
    {
            "id": "101",
            "name": "Archbould",
            "email": "archbould@example.com",
            "address": "House #33, ABC Lane, ABC CITY 06987",
            "gender" : "male",
            "phone": {
                "mobile": "+1 1234567890",
                "home": "00 123456",
                "office": "00 321654"
            }
    }
}

我必须下载它并在表格视图中显示。到目前为止,我已经能够下载整个快照,但无法下载特定节点的数据。

这是我的代码:

 let urlAsString = "https://raw.githubusercontent.com/mobilesiri/JSON-Parsing-in-Android/master/index.html"
    let url = NSURL(string: urlAsString)!
    let urlSession = NSURLSession.sharedSession()

    //2
    let jsonQuery = urlSession.dataTaskWithURL(url, completionHandler: { data, response, error -> Void in
        if (error != nil) {
            println(error.localizedDescription)
        }
        var err: NSError?

        // 3
        var jsonResult = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &err) as NSDictionary
        if (err != nil) {
            println("JSON Error \(err!.localizedDescription)")
        }

        // 4

    println(jsonResult)


        dispatch_async(dispatch_get_main_queue(), {

        })
    })
    // 5
    jsonQuery.resume()
}

现在我的问题是如何下载特定节点数据并将其显示在表格视图中。

【问题讨论】:

  • 你的意思是你只想下载特定的字典或其他任何东西..
  • 我希望所有数据都显示在表格视图的不同行中。根据id,它应该在表格视图中一一显示..
  • 创建一个包含所有这些属性的对象,对于每个字典都应该有等效的对象。制作这些对象的数组。将数据从该索引处的每个对象添加到每个单元格。
  • 帮帮我..你可以编码吗?
  • gist.github.com/Starefossen/689428b6c532d7fec0bb 浏览此链接..希望对您有所帮助

标签: json swift uitableview


【解决方案1】:

执行以下实现。

  • 创建一个包含所有这些属性的对象,对于每个 字典应该有等效的对象。制作这些数组 对象。将数据从该索引处的每个对象添加到每个单元格。

  • 也可以参考下面的链接

    gist.github.com/Starefossen/689428b6c532d7fec0bb

要点内容:

import UIKit
import Foundation
import XCPlayground

XCPSetExecutionShouldContinueIndefinitely()

class RemoteAPI {
    func getData(completionHandler: ((NSArray!, NSError!) -> Void)!) -> Void {
        let url: NSURL = NSURL(string: "http://itunes.apple.com/search?term=Turistforeningen&media=software")
        let ses = NSURLSession.sharedSession()
        let task = ses.dataTaskWithURL(url, completionHandler: {data, response, error -> Void in
            if (error != nil) {
                return completionHandler(nil, error)
            }

            var error: NSError?
            let json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary

            if (error != nil) {
                return completionHandler(nil, error)
            } else {
                return completionHandler(json["results"] as [NSDictionary], nil)
            }
        })
        task.resume()
    }
}

var api = RemoteAPI()

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    var tableView: UITableView!
    var items: NSMutableArray = []

    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.frame = CGRect(x: 0, y: 0, width: 320, height: 480)
        self.tableView = UITableView(frame:self.view!.frame)
        self.tableView!.delegate = self
        self.tableView!.dataSource = self
        self.tableView!.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
        self.view?.addSubview(self.tableView)

        api.getData({data, error -> Void in
            if (data != nil) {
                self.items = NSMutableArray(array: data)
                self.tableView!.reloadData()
                self.view
            } else {
                println("api.getData failed")
                println(error)
            }
        })
    }

    func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
        return self.items.count;
    }

    func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! {
        let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell")

        if let navn = self.items[indexPath.row]["trackName"] as? NSString {
            cell.textLabel.text = navn
        } else {
            cell.textLabel.text = "No Name"
        }

        if let desc = self.items[indexPath.row]["description"] as? NSString {
            cell.detailTextLabel.text = desc
        }

        return cell
    }
}

ViewController().view

【讨论】:

    猜你喜欢
    • 2012-10-23
    • 1970-01-01
    • 2019-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多