我有2个程序,第一个在线阅读JSON并将其保存到数组中。第二个程序使用数组完成UITableView
,但是当我加入时,不能正常工作。
当我调试时,我先查看表格,但我先使用子方法。
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
var TableData:Array< String > = Array < String > ()
let textCellIdentifier = "TextCell"
override func viewDidLoad() {
super.viewDidLoad()
//--------------------------------------------------------------------------------------------------
let requestURL: NSURL = NSURL(string: "http://www.learnswiftonline.com/Samples/subway.json")!
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(urlRequest) {
(data, response, error) -> Void in
let httpResponse = response as! NSHTTPURLResponse
let statusCode = httpResponse.statusCode
if (statusCode == 200) {
do{
let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)
if let stations = json["stations"] as? [[String: AnyObject]] {
for station in stations {
if let name = station["stationName"] as? String {
if let year = station["buildYear"] as? String {
self.TableData.append(name + "[" + year + "]")
}
}
}
}
}catch {
print("Error with Json: \(error)")
}
/* for element in TableData {
print(element)
}*/
}
}
task.resume()
//--------------------------------------------------------------------------------------------------
tableView.delegate = self
tableView.dataSource = self
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return TableData.count
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(textCellIdentifier, forIndexPath: indexPath)
let row = indexPath.row
cell.textLabel?.text = TableData[row]
return cell
}
}
在我的模拟器上只看到空表
答案 0 :(得分:1)
因为你没有重新加载tableView。 HTTP请求需要一段时间才能完成。
请求完成后,请致电self.tableView.reloadData()
。
它将在另一个队列中,因此请使用
NSOperationQueue.mainQueue().addOperationWithBlock { () -> Void in
self.tableView.reloadData()
}
放置它
// Stuff above...
if let stations = json["stations"] as? [[String: AnyObject]] {
for station in stations {
if let name = station["stationName"] as? String {
if let year = station["buildYear"] as? String {
self.TableData.append(name + "[" + year + "]")
}
}
}
// Do your reload here.. as your array will have finished populating
}
// Stuff below..