以下代码工作正常,但“for” block 不起作用 所以“TableView”到数据中没有添加。
如何解决这个问题?
class ViewController: UITableViewController {
var NumberOfRows = 0
var BaslikArray = [String]()
var GonderenArray = [String]()
override func viewDidLoad() {
super.viewDidLoad()
parseJSON()
}
func parseJSON(){
let myUrl = NSURL(string: "http://10.10.5.1/mjson.php");
let request = NSMutableURLRequest(URL:myUrl!);
request.HTTPMethod = "POST";
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
let postString = "istek=pmliste&eposta=abc@abc.com&sifre=70c5fb2837e3edf992674a06fc876920&salt=sMb&tt=1";
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding);
let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil
{
print("error=\(error)")
return
}
let readableJSON = JSON(data: data!, options: NSJSONReadingOptions.MutableContainers, error: nil)
self.NumberOfRows = readableJSON["pm"].count
for var i = 0; i < self.NumberOfRows; i++ {
let aa = readableJSON["pm"][i]["baslik"].string!
self.BaslikArray.append(aa)
NSLog("\(readableJSON["pm"][i]["baslik"].string!)")
}
}
task.resume()
}
override func tableView(tableView: UITableView, numberOfRowsInSection sesction: Int) -> Int {
return NumberOfRows
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell" , forIndexPath: indexPath) as UITableViewCell
if BaslikArray.count != 0 {
cell.textLabel?.text = BaslikArray[indexPath.row]
}
return cell
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
最佳答案
数据加载完成后,您必须在 TableView 上调用reloadData
。即,在 for 循环完成之后。
为了使代码变得更好,您可以做的另一件事是删除 NumberOfRows
属性。只要您需要知道有多少行,只需使用 BaslikArray.count
即可。
关于json - TableView 不能快速工作,请帮助我,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33850105/