运行我的代码

时间:2016-02-01 03:26:10

标签: ios swift api tableviewcell

请帮忙!我尝试了一切。如果有人对如何在表格视图单元格中显示我的数据有任何建议,我将永远感激不尽。我是iOS的新手,我正在以非常陡峭的速度学习。我从一个以JSON形式返回数据的API中获取数据,对其进行解析,使用其表视图单元创建我的表视图,但我似乎无法弄清楚如何打印我在表中解析的数据查看单元格。

import UIKit

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var myTableView: UITableView! {
    didSet {
        myTableView.dataSource = self
        myTableView.delegate = self
    }
}


override func viewDidLoad() {
    super.viewDidLoad()

    let url = NSURL(string: "https://api.viacom.com/apiKey=someKey")!
    let request = NSMutableURLRequest(URL: url)

    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithRequest(request) { data, response, error in
        if let response = response, data = data {

            var json: [String: AnyObject]!
            do {
                json = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions()) as! [String : AnyObject]
                } catch {
                        print(error)

                }

    //2 - Store in model, forloop through them, store into temparray,add to main array?


             let episodes = json["response"] as! [String: AnyObject]
             let meta = episodes["episodes"] as! [AnyObject]
             let description = meta[2]["description"]! as! String?
             //let title = meta[2]["title"] as! String?
             let episodeNumber = meta[2]["episodeNumber"]! as! String?

             dispatch_async(dispatch_get_main_queue(), {
                 self.myTableView.reloadData()})

            data = [episodeNumber!, description!]


            print("Episode Number: \(episodeNumber!)\n" + "Description: \(description!)")

            } else {

            print(error)

            }
        }

    task.resume()
}

let data = [description]

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)

    cell.textLabel!.text = "\(self.data)"

    return cell
}

override func didReceiveMemoryWarning()
{

    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

}

3 个答案:

答案 0 :(得分:1)

你的代码对我来说非常混乱。但是,我只是假设您已成功获取JSON数据。获取数据是异步的。因此,您需要在里面添加一个调度代码。 在你的这行代码之后:

let episodeNumber = meta[2]["episodeNumber"]! as! String?

添加此

dispatch_async(dispatch_get_main_queue(), {
       self.tableView.reloadData()})

编辑:

@IBOutlet weak var myTableView: UITableView! {
    didSet {
        myTableView.dataSource = self
        myTableView.delegate = self // Add This
    }
}

答案 1 :(得分:0)

let data = [description]

的简短形式
let data = [self.description]

self.description()是viewController用于打印调试描述的描述方法。这就是为什么

cell.textLabel!.text = "\(self.data)"

为您提供[(Function)],因为您刚刚创建了一个包含存储函数的数组。

答案 2 :(得分:0)

失败的原因是数据操作过多。不需要使用这么多变量并且不必要地传递数据。打印时,您在控制台中获得正确的输出,因为您使用了变量" episodeNumber"和"描述"。

print("Episode Number: \(episodeNumber!)\n" + "Description: \(description!)")

在变量"数据"。

中获取错误的数据

更好的是你应该使用episodeNumber和description变量在Cell中打印数据。

cell.textLabel!.text = "Episode Number: \(self.episodeNumber)\n" + "Description: \(description)"

但为此你必须使变量episodeNumber成为一个全局变量。

所以在函数之外声明它。

var episodeNumber = String()

并从行

中删除let关键字
let episodeNumber = meta[2]["episodeNumber"]! as! String?

您必须添加一些self.关键字,编译器会建议您这样做,因此您不必担心这一点,只需继续双击建议。

现在,您的代码可以正常运行并获得所需的输出。