2015-09-06 103 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