簡體   English   中英

表格視圖未使用HTTP請求獲取的數據更新

[英]Table View not updating with data fetched by HTTP Request

我正在嘗試使用從http請求(JSON)提取的數據填充表視圖,但是它不起作用。 如果我用靜態數據填充表格視圖,那么一切都會正常..代碼段:

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()不會填充表格。 在調試時,數組將被填充。

如果設置了斷點, 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM