当前位置: 首页 > 面试题库 >

TableView不显示数据

充浩波
2023-03-14
问题内容

我正在尝试填写UITableView从GET请求中收到的一些数据。我不知道为什么,但是如果在我的中numberOfRowsInSection,我返回一个特定的值(例如8),它表示信息。如果y返回请求填充的数组的值,UITableView则不添加任何行:

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()
}


 类似资料:
  • 我试图在TableView中插入一些值,但它不显示列中的文本,尽管这些列不是空的,因为有三行(与我在TableView中插入的条目数量相同)可单击。 我有一个类“ClientIController”,它是fxml文件的控制器,这些是TableView和TableView的列的声明。 我在initialize()方法中调用了一个名为loadTable()的函数,该函数将内容添加到TableView中

  • 下面是FXML代码- 我尝试与数据库连接,并尝试将数据从数据库显示到TableView。我尝试将这些东西实现到控制器类中,如下所示- 问题是,它显示行错误。我不知道这个错误的原因。如果我将一行编辑为,则不会显示行的任何错误。然后应用程序运行良好。但是,当我单击Show TableWiew按钮时,它不会将数据显示到TableView中,而是将数据显示到控制台中。 我应该忽略这些错误吗?我如何解决我的

  • 我试图编写一个程序,使用TableView在javafx gui中显示数据库中表的内容。我有一个通用gui,其中有一个空的TableView。在确定要显示的表之后,应用程序将表名发送给中间件,中间件从数据库中获取所有列名,并将其BACC发送给应用程序。然后循环所有列名,生成一个新的TableColumn并将其添加到TableView中,并调用TableView的方法。使用我可以看到这些列成功地添加

  • getter称为getShowName()、getEpsWatched()和getShowStatus(),它们获得变量showName、epsWatched和showStatus。 这里怎么了?显示字符串,但不显示int。

  • 嗨,我有javafx tableview问题。我试过解决办法,但没能解决这个问题。有行,可以在行之间切换,但数据没有显示。我不明白问题出在哪里。你能帮我一下吗?

  • 我正在尝试jQuery数据表控件。问题是我不能显示数据。 HTML是: 如果我注释掉Ajax代码并取消注释 它很好用。变量是我使用firefox从服务中获取的JSON数据- 我读了很多帖子,尝试了很多东西,但都没能成功。有什么帮助吗?谢谢 编辑:服务代码: 《编辑》20150721:我对HTML代码做了一些修改,但有一个小错误。加载时,我在页面顶部看到了table元素的标题(ActivityHis