我目前正在创建一个应用程序来显示最新的足球比分。我已通过 URL 连接到 API,并将英格兰超级联赛的球队名称拉回到字符串数组中。
问题似乎来自于填充我打算用来显示团队列表的 iOS 表格视图。数据似乎是从 API 中提取的,但由于某种原因,创建单元格并返回它的 TableView 方法似乎没有被调用。我唯一能得到要调用的方法的时候是当我实际上将一个值硬编码到团队名称数组中时。
这是我的代码:
class Main: UIViewController {
var names = [String]()
override func viewDidLoad() {
super.viewDidLoad()
let URL_String = "https://football-api.com/api/?Action=standings&APIKey=[API_KEY_REMOVED]&comp_id=1204"
let url = NSURL(string: URL_String)
let urlRequest = NSURLRequest(URL: url!)
let config = NSURLSessionConfiguration.defaultSessionConfiguration()
let session = NSURLSession(configuration: config)
let task = session.dataTaskWithRequest(urlRequest, completionHandler: {
(data, response, error) in
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .AllowFragments)
if let teams = json["teams"] as? [[String : AnyObject]] {
for team in teams {
if let name = team["stand_team_name"] as? String {
self.names.append(name)
}
}
}
} catch {
print("error serializing JSON: \(error)")
}
})
task.resume()
}
// Number of Sections In Table
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
// Number of Rows in each Section
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return names.count
}
// Sets the content of each cell
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
cell.textLabel?.text = names[indexPath.row]
return cell
}
}
只是想知道是否有人可以在这里为我指出正确的方向。此代码不会崩溃或引发任何错误,它只是拒绝加载表视图。我能想到的唯一原因是,在完成对 API 的请求后,团队名称数组为空。不过,我已经在整个过程中设置了断点并检查了局部变量的值,并且正在按预期从 API 中提取所需的信息......
你的方法是正确的,一旦你从 API 获取了新数据,只需使用
reloadData
刷新表格即可
if let teams = json["teams"] as? [[String : AnyObject]] {
for team in teams {
if let name = team["stand_team_name"] as? String {
self.names.append(name)
}
}
dispatch_async(dispatch_get_main_queue(), { () -> Void in
self.yourtableViewname.reloadData()
})
}