我是 iOS 的新手,我通过解析 JSON 数据从 Web 源动态填充 tableView 数据。但问题是当我第一次访问该选项卡时,它什么也没显示。在我访问另一个选项卡并返回后,它在 tableView 上正确显示数据。
这是我的代码
import UIKit
class BranchViewController: UITableViewController , UISearchBarDelegate, UISearchDisplayDelegate {
var branches = [Branch]()
var filteredBranch = [Branch]()
var BranchArray = [BranchTable]()
var BranchLocationArray = [BranchLocation]()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.tableView!.delegate = self
self.tableView!.dataSource = self
let url = NSURL(string: "http://rana.ninja/branches.php")
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
println(NSString(data: data, encoding: NSUTF8StringEncoding))
var error: NSError?
let jsonData: NSData = data /* get your json data */
let json = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as NSDictionary
if let name: AnyObject = json["name"] {
for var index = 0; index < name.count; ++index {
var Name : String = name[index] as NSString
self.branches.append(Branch(name: Name))
println(Name)
}
}
}
task.resume()
BranchArray =
[BranchTable(BranchTitle: ["FirstFirst","SecondFirst","ThirdFirst"]),
BranchTable(BranchTitle: ["FirstSecond","SecondSecond","ThirdSecond"]),
BranchTable(BranchTitle: ["FirstThird","SecondThird","ThirdThird"]),
BranchTable(BranchTitle: ["FirstFourth"])]
BranchLocationArray = [BranchLocation(BranchLocationValues: ["asdfasd","asdfasd","asdfas"]),
BranchLocation(BranchLocationValues: ["asdkljf","asdfasd","asdfas"]),
BranchLocation(BranchLocationValues: ["asdkljf","asdfasd","asdfas"]),
BranchLocation(BranchLocationValues: ["asdkljf","asdfasd","asdfas"])]
// Reload the table
self.tableView.reloadData()
}
最佳答案
您需要在更新数据结构后调用tableView.reloadData
。这必须在主线程中完成,因此:
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
println(NSString(data: data, encoding: NSUTF8StringEncoding))
var error: NSError?
let jsonData: NSData = data /* get your json data */
let json = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as NSDictionary
if let name: AnyObject = json["name"] {
for var index = 0; index < name.count; ++index {
var Name : String = name[index] as NSString
self.branches.append(Branch(name: Name))
println(Name)
}
}
// NOTE: Calling reloadData in the main thread
dispatch_async(dispatch_get_main_queue()) {
self.tableView.reloadData()
}
}
关于ios - 在我点击另一个选项卡并返回之前,tableView 不会更新 - swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28782932/