2015-09-06 76 views
-2

我对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不会改变。 对不起,我的英语。

回答

1

你需要调用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; 
    } 
} 
+0

谢谢,现在的作品,但它是〜40秒。 40秒我看到只有一个单元格,然后所有6个单元格加载。你知道为什么吗?当我使用非异步请求时,它约为4秒。为所有装载。 – GenRiH

+0

看起来你正在更新后台线程上的tableView。将reloadData()移到主线程上。 – Siriss

+0

我感动了,仍然是40秒:( – GenRiH