NSArray更改后UITableView没有更新
问题描述:
我对HTTP有异步请求,我想阅读JSON并填写我的查看表。NSArray更改后UITableView没有更新
我得到的数据与请求,我做NSArray,但我可以传递它在我的函数,tableView numberOfRowsInSection返回只有1,请帮助。
import Foundation
import UIKit
class ThirdView : UITableViewController {
var jsonz:NSArray = ["Ray Wenderlich"];
let url = NSURL(string: "http://iweddings.ru/xmlrestaurant.json");
override func viewDidLoad() {
super.viewDidLoad()
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
let json = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: nil) as! NSArray
println(json)
// here i see in xCode output
// price = 4500;
// rating = 45;
// slogan = "\U041d\U0435\U043b\U0435\U0433\U0430\U043b\U044c\U043d\U043e";
// status = 1;
// type = 1;
// etc....
self.jsonz = json;
}
task.resume()
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1;
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
println(self.jsonz.count);
return self.jsonz.count;
// here i see always "1" ???? why?
}
的NSArray jsonz不会改变。 对不起,我的英语。
答
你需要调用reloadData()
方法之后JSON数据下载:
class ThirdView: UITableViewController {
var jsonz: NSArray = ["Ray Wenderlich"]
let url = NSURL(string: "http://iweddings.ru/xmlrestaurant.json")
override func viewDidLoad() {
super.viewDidLoad()
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
let json = NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: nil) as! NSArray
println(json)
self.jsonz = json;
self.tableView.reloadData()
}
task.resume()
}
override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1;
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
println(self.jsonz.count);
return self.jsonz.count;
}
}
谢谢,现在的作品,但它是〜40秒。 40秒我看到只有一个单元格,然后所有6个单元格加载。你知道为什么吗?当我使用非异步请求时,它约为4秒。为所有装载。 – GenRiH
看起来你正在更新后台线程上的tableView。将reloadData()移到主线程上。 – Siriss
我感动了,仍然是40秒:( – GenRiH