2016-12-05 63 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

伟大的:)你能标记我的答案是正确的吗? –