请帮忙!我尝试了一切。如果有人对如何在表格视图单元格中显示我的数据有任何建议,我将永远感激不尽。我是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.
}
}
答案 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.
关键字,编译器会建议您这样做,因此您不必担心这一点,只需继续双击建议。
现在,您的代码可以正常运行并获得所需的输出。