JSON 到 TableView 的难度

Posted

技术标签:

【中文标题】JSON 到 TableView 的难度【英文标题】:JSON to TableView difficulty 【发布时间】:2015-04-07 22:17:07 【问题描述】:

我在从 json 结果填充 tableview 时遇到困难。我的代码如下(抱歉,但它似乎不想将前两行作为代码:/):

导入 UIKit

类 ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource

override func viewDidLoad()

    super.viewDidLoad()

    let url = NSURL(string: "http://api.football-data.org/alpha/soccerseasons/354/teams")
    let data = NSData(contentsOfURL: url!)
    let json = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: nil) as NSDictionary

    let teamsArray = json["teams"] as NSArray

    print("Team List : \(teamsArray)")

    for dic in teamsArray
    
        let teamname = dic["name"] as NSString

        let code = dic["code"] as NSString

        println("Team Name, \(teamname) : Code, \(code)")
    

    //        self.tableViewObject.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")


@IBOutlet weak var tableViewObject: UITableView!




func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int

    return teamsArray.count




func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell

    let cell:UITableViewCell=UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "mycell")
    cell.textLabel!.text = teamsArray[indexPath.row]


    return cell

它两次抱怨“两次使用未解析的标识符'teamsArray'。首先在:

返回 teamsArray.count

然后在:

cell.textLabel!.text = teamsArray[indexPath.row]

有人可以帮我解决上面提到的错误或将我引向正确的方向,从而帮助我将我的 JSON 与我的 tableview 链接起来。

值得注意的是,当我在没有任何 tableview 提示的空白视图上使用代码时,我在控制台中得到了完美的结果:

    let url = NSURL(string: "http://api.football-data.org/alpha/soccerseasons/354/teams")
    let data = NSData(contentsOfURL: url!)
    let json = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: nil) as NSDictionary

    let teamsArray = json["teams"] as NSArray

    print("Team List : \(teamsArray)")

    for dic in teamsArray
    
        let teamname = dic["name"] as NSString

        let code = dic["code"] as NSString

        println("Team Name, \(teamname) : Code, \(code)")
    

我是 *** 的新手,之前有人告诉我我的问题不够具体。如果这仍然太模糊,请告诉我,我会努力改进它。

非常感谢,艾伦。

【问题讨论】:

您需要了解scope。您在viewDidLoad 中声明teamsArray,但您在其他方法中使用它。通过在viewDidLoad 中声明它,您就是在告诉您的代码您只需要在viewDidLoad 中使用它。所以当你尝试在其他方法中引用它时,它并不知道它。可以这样想:如果你躲在家里,街上的人能看到你吗?这就是现在正在发生的事情。您需要将其声明更高一级才能正常工作。 我认为会是这样,但是当我将它提高一级时,代码本身根本不会运行:/ 你是如何使用它的?尝试使用以下class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource var teamsArray : NSArray override func viewDidLoad() ....。然后在viewDidLoad 里面,做self.teamsArray = json["teams"]。我写的不是很快,所以它可能不是 100% 正确,但应该是正确的。 【参考方案1】:

这样做...

  import UIKit

class ViewController:   UIViewController,UITableViewDelegate,UITableViewDataSource 

 @IBOutlet weak var tableViewObject: UITableView!
 var teamsArray = NSArray()
 override func viewDidLoad()

super.viewDidLoad()

self.tableViewObject.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")

let url = NSURL(string: "http://api.football-data.org/alpha/soccerseasons/354/teams")
let data = NSData(contentsOfURL: url!)
let json = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: nil) as NSDictionary

teamsArray = json["teams"] as NSArray

print("Team List : \(teamsArray)")

self.tableViewObject.reloadData()

for dic in teamsArray

    let teamname = dic["name"] as NSString

    let code = dic["code"] as NSString

    println("Team Name, \(teamname) : Code, \(code)")








func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int

return teamsArray.count




 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell


let cell:UITableViewCell=UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "mycell")
cell.textLabel!.text = self.teamsArray.objectAtIndex(indexPath.row).objectForKey("name") as? NSString


return cell

【讨论】:

您好,非常感谢您提供的代码。我确实将它复制了进去,我得到了一个成功的构建,但是它在运行时出错了。我会将错误图像添加到问题中,看看它是否有帮助。也许我错误地设置了我的视图控制器?如果你能提供一个拉链,那将是完美的,但我很感激我问这个问题很厚颜无耻。非常感谢,艾伦。 抱歉,在我获得 10 个声望点之前我无法上传图片。对不起。 你得到什么错误?因为我在我的 xcode 中实现了相同的代码并且工作完美。 忽略我,是我的输入文件导致问题不是您的代码 :) 非常感谢您的帮助。

以上是关于JSON 到 TableView 的难度的主要内容,如果未能解决你的问题,请参考以下文章

JSON 显示到 tableview

JSON到Tableview [重复]

在swift 5中将json数据获取到tableview

为啥我在使用 kingfisher 将图像从 JSON 加载到 tableview 时出错?

将 Json 数据加载到 TableView 中

iPhone JSON 到 TableView