我正在尝试填写UITableView从GET请求中收到的一些数据。我不知道为什么,但是如果在我的中numberOfRowsInSection,我返回一个特定的值(例如8),它表示信息。如果y返回请求填充的数组的值,UITableView则不添加任何行:
UITableView
numberOfRowsInSection
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 } }
知道为什么会这样吗?非常感谢你!!
更新!
我解决了这个问题,在loadUserData()函数内的complete()之后添加了self.tableView.reloadData()。希望能帮助到你!
快速解决方案:
tableView.reloadData()
如果不是从主线程调用它:
DispatchQueue.main.async { self.tableView.reloadData() }