tableView没有显示来自JSON的数据在swift中

我从这里parsingJSON数据。

为此我使用了这个代码。

DataManager.swift

import Foundation let TopAppURL = "http://api.feedzilla.com/v1/categories.json" class DataManager { class func getTopAppsDataFromItunesWithSuccess(success: ((iTunesData: NSData!) -> Void)) { //1 loadDataFromURL(NSURL(string: TopAppURL)!, completion:{(data, error) -> Void in //2 if let urlData = data { //3 success(iTunesData: urlData) } }) } class func loadDataFromURL(url: NSURL, completion:(data: NSData?, error: NSError?) -> Void) { var session = NSURLSession.sharedSession() // Use NSURLSession to get data from an NSURL let loadDataTask = session.dataTaskWithURL(url, completionHandler: { (data: NSData!, response: NSURLResponse!, error: NSError!) -> Void in if let responseError = error { completion(data: nil, error: responseError) } else if let httpResponse = response as? NSHTTPURLResponse { if httpResponse.statusCode != 200 { var statusError = NSError(domain:"com.raywenderlich", code:httpResponse.statusCode, userInfo:[NSLocalizedDescriptionKey : "HTTP status code has unexpected value."]) completion(data: nil, error: statusError) } else { completion(data: data, error: nil) } } }) loadDataTask.resume() } } 

ViewController.swift

 import UIKit class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { var i = 0 var detailid = [Int]() var detailCat = [String]() var tableData = ["1","2","3"] @IBOutlet weak var tableView: UITableView! override func viewDidLoad() { super.viewDidLoad() DataManager.getTopAppsDataFromItunesWithSuccess { (iTunesData) -> Void in let json = JSON(data: iTunesData) if let array = json.arrayValue{ for Dict in array{ var id : Int = array[self.i]["category_id"].integerValue! var category : String = array[self.i]["english_category_name"].stringValue! self.detailid.append(id) self.detailCat.append(category) self.i++ } println(self.detailid) println(self.detailCat) } } } func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ return self.detailCat.count } func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{ var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as UITableViewCell cell.textLabel.text = self.detailCat[indexPath.row] return cell } } 

在控制台中,我得到的数据如下:

 [1314, 13, 21, 22, 5, 588, 6, 17, 25, 1168, 11, 14, 2, 28, 15, 33, 591, 20, 29, 36, 3, 10, 16, 18, 8, 34, 4, 27, 30, 31, 26, 23, 12, 7, 590, 9, 19] [Sports, Art, Blogs, Business, Celebrities, Columnists, Entertainment, Events, Fun Stuff, General, Health, Hobbies, Industry, Internet, IT, Jobs, Law, Life Style, Music, Oddly Enough, Politics, Products, Programming, Religion And Spirituality, Science, Shopping, Society, Sports, Technology, Top Blogs, Top News, Travel, Universities, USA, Video, Video Games, World News] 

但它不是打印到tableView

我错过了什么? 请帮我这个。

viewDidLoadfor循环完成之后,你得到了你的数据,你必须调用:

 tableView.reloadData() 

我也跟随雷的教程为我的iOS应用程序,发现数据pipe理器不能传递数据以外的for循环。 所以我用另一种方法来parsingswiftyJSON。 我花了一天的时间来解决这个问题。 所以与你分享我的解决scheme。 我调用一个url来获取json数据,在json中有医院坐标列表,并在parsing数据后向mapKit添加位置。

让locationURL = NSURL(string:“http:your url”)var request = NSURLRequest(URL:locationURL!)var data = NSURLConnection.sendSynchronousRequest(request,returningResponse:nil,error:nil)

  let json = JSON(data: data!) if let appArray = json.array { for appDict in appArray { var appName: String? = appDict["title"].string var appLocation: String? = appDict["locationName"].string var dLatitude: Double? = appDict["latitude"].doubleValue var dLongitude: Double? = appDict["longitude"].doubleValue var coordinate: CLLocationCoordinate2D? = CLLocationCoordinate2D(latitude: dLatitude!, longitude: dLongitude!) hospital = HospitalModel(title: appName!, locationName: appLocation!, coordinate: CLLocationCoordinate2D(latitude: dLatitude!, longitude: dLongitude!)) hoslist.append(hospital) } mapView.addAnnotations(hoslist) } mapView.addAnnotations(hoslist) }