2016-12-05 69 views
0

我想填充表格視圖與從HTTP請求(JSON)獲取的數據,但它不工作。如果我填充靜態數據表視圖,一切工作正常..代碼片段:表視圖不會更新與HTTP請求獲取的數據

import UIKit 
import Alamofire 
//import SwiftyJSON 

class ViewControllerNews : UITableViewController{ 
@IBOutlet var table: UITableView! 

var posts = [FacebookPost]() 

override func viewDidLoad() { 
    pullFacebookNews() 
    //loadSampleNews() 
    super.viewDidLoad() 

} 

func pullFacebookNews() -> Void { 


    let params = ["limit":"100", "access_token": myaccesstoken] 


    Alamofire.request("https://graph.facebook.com/<page-id>/posts", parameters: params).responseJSON{ response in 

    if let responsejson = response.result.value { 
     let JSON = responsejson as! NSDictionary 
     let itemsArray: NSArray? = JSON.object(forKey: "data") as? NSArray 

     if(itemsArray != nil) { 
      for item in itemsArray! { 

      let thisitem = item as! NSDictionary 
      print(thisitem.object(forKey: "message") as? String) 
      print(thisitem.object(forKey:"created_time") as? String) 
      let title1 = thisitem.object(forKey: "message") as? String 
      let value1=thisitem.object(forKey:"created_time") as? String 
      if(title1 != nil && value1 != nil) { 
        let news = FacebookPost(title: title1!, value: value1!) 
        self.posts.append(news) 
       } 

      }} 

     } 
    } 
do_table_refresh() 
} 

func do_table_refresh() { 


DispatchQueue.global(qos: .background).async { 

DispatchQueue.main.async { 
self.table.reloadData() 
} 
} 
} 
func loadSampleNews() { 
    let news1 = FacebookPost(title: "ich bin ein datum", value: "Ich bin eine news") 

    let news2 = FacebookPost(title: "ich bin ein datum2", value: "Ich bin eine news2") 

    let news3 = FacebookPost(title: "ich bin ein datum3", value: "Ich bin eine news3") 

    posts += [news1, news2, news3] 
} 

override func numberOfSections(in: UITableView) -> Int { 
    return 1 
} 
override func tableView(_: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return posts.count 
} 
override func tableView(_: UITableView, cellForRowAt: IndexPath) -> UITableViewCell { 
    let cellIdentifier = "NewsTableViewCell" 
    let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: cellForRowAt as IndexPath) as! NewsTableViewCell 

    let news = posts[cellForRowAt.row] 

    cell.date.text = news.title 
    cell.news_text.text = news.value 

    return cell 
} 
} 

的loadSampeNews()的作品完美,但pullFacebookNews()不填充表。當調試陣列被填充時。

+0

是你的tableView數據源/代表設置? – zsteed

回答

2

如果設置了斷點,在看到if let responsejson = response.result.value之前,會看到do_table_refresh()被調用。這是因爲Alamofire調用有一個完成處理程序。在致電do_table_refresh()之前,您必須等到互聯網電話完成。

所以,如果你所有的數據都像你說的那樣正確加載,你基本上只需要移動do_table_refresh()

func pullFacebookNews() -> Void { 
    let params = ["limit":"100", "access_token": myaccesstoken] 
    Alamofire.request("https://graph.facebook.com/<page-id>/posts", parameters: params).responseJSON{ response in 

    if let responsejson = response.result.value { 
     let JSON = responsejson as! NSDictionary 
     let itemsArray: NSArray? = JSON.object(forKey: "data") as? NSArray 

     if(itemsArray != nil) { 
     for item in itemsArray! { 
      let thisitem = item as! NSDictionary 
      print(thisitem.object(forKey: "message") as? String) 
      print(thisitem.object(forKey:"created_time") as? String) 
      let title1 = thisitem.object(forKey: "message") as? String 
      let value1=thisitem.object(forKey:"created_time") as? String 
      if(title1 != nil && value1 != nil) { 
      let news = FacebookPost(title: title1!, value: value1!) 
      self.posts.append(news) 
      } 
     } 
     } 
     self.do_table_refresh() 
    } 
    } 
} 

此外,不要使用該語法來命名您的方法。這不是最佳做法。應該是doTableRefresh()什麼的。

+0

完美的作品,謝謝! – Progph

+1

偉大的:)你能標記我的答案是正確的嗎? –