ViewTable不读取数组(IOS)

时间:2016-04-14 12:05:01

标签: ios arrays json tableview

我有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
}

 }

在我的模拟器上只看到空表

1 个答案:

答案 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..