TableView does not show data

匿名 (未验证) 提交于 2019-12-03 01:58:03

问题:

I am trying to fill my UITableView with some data I receive from a GET request. I don't know why but if in my numberOfRowsInSection, I return an specific value (for example, 8) it represents the info. If y return the value of my array filled by the request, the UITableView does not add any row:

class DashboardTableViewController: UITableViewController {      var userData = [String]()     var secondUserData = [String]()     var name: String = ""      override func viewDidLoad() {         super.viewDidLoad()     }      override func viewWillAppear(_ animated: Bool) {         super.viewWillAppear(animated)     }      /* This function gets the user account information from a JSON in a simple request */     private func loadUserData(completion: @escaping (_ myArray: [String]) -> Void) {         let session = Twitter.sharedInstance().sessionStore.session()         let client = TWTRAPIClient.withCurrentUser()         let userInfoURL = "https://api.twitter.com/1.1/users/show.json"         let params = ["user_id": session?.userID]         var clientError : NSError?         let request = client.urlRequest(withMethod: "GET", url: userInfoURL, parameters: params, error: &clientError)          client.sendTwitterRequest(request) { (response, data, connectionError) -> Void in             if connectionError != nil {                 print("Error: \(connectionError)")             }              do {                 let json = JSON(data: data!)                 if  let userName = json["name"].string,                     let description = json["description"].string,                     let followersCount = json["followers_count"].int,                     let favouritesCount = json["favourites_count"].int,                     let followingCount = json["friends_count"].int,                     let lang = json["lang"].string,                     let nickname = json["screen_name"].string {                         self.userData.append(userName)                         self.userData.append(nickname)                         self.userData.append(String(followersCount))                         self.userData.append(String(followingCount))                         self.userData.append(String("22"))                         self.userData.append(lang)                         self.userData.append(description)                         self.userData.append("No country")                          completion(self.userData)                 }             }         }     }      /* This closure helps us to fill the labels once the request has been finished in loadUserData */     func manageUserData(label: UILabel, index: Int) {         loadUserData {             (result: [String]) in             label.text = result[index]         }     }      // MARK: - Table view data source     override func numberOfSections(in tableView: UITableView) -> Int {         // #warning Incomplete implementation, return the number of sections         return 1     }      override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {         // #warning Incomplete implementation, return the number of rows         return self.userData.count     }      override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {         let rowNumber = indexPath.row         let cellIdentifier = "TableViewCell"         guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? TableViewCellController else {             fatalError("The dequeued cell is not an instance of TableViewCellController.")         }          switch rowNumber {         case 0:             cell.titlePlaceholder.text = "Name:"             manageUserData(label: cell.valuePlaceholder, index: rowNumber)         case 1:             cell.titlePlaceholder.text = "Nickname:"             manageUserData(label: cell.valuePlaceholder, index: rowNumber)         case 2:             cell.titlePlaceholder.text = "Followers:"             manageUserData(label: cell.valuePlaceholder, index: rowNumber)         case 3:             cell.titlePlaceholder.text = "Following:"             manageUserData(label: cell.valuePlaceholder, index: rowNumber)         case 4:             cell.titlePlaceholder.text = "Tweets:"             manageUserData(label: cell.valuePlaceholder, index: rowNumber)         case 5:             cell.titlePlaceholder.text = "Language:"             manageUserData(label: cell.valuePlaceholder, index: rowNumber)         case 6:             cell.titlePlaceholder.text = "Biography:"             manageUserData(label: cell.valuePlaceholder, index: rowNumber)         case 7:             cell.titlePlaceholder.text = "Country:"             manageUserData(label: cell.valuePlaceholder, index: rowNumber)         default:             cell.titlePlaceholder.text = "?"             cell.valuePlaceholder.text = "?"         }          return cell     } } 

Any idea why this is happening ? Thank you very much!!

UPDATE!

I solved this problem adding self.tableView.reloadData() after completion() inside loadUserData() function. Hope it helps!

回答1:

Swift solution:

tableView.reloadData() 

If you are calling it not from the main thread:

DispatchQueue.main.async {     self.tableView.reloadData() } 


回答2:

You must reload table view data after receiving request with

[self.tableView reloadData]; 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!