ios - 这个 UITableView 没有显示在我的 View Controller 上的原因是什么?

标签 ios swift uitableview

我有第二个 View Controller (不是我的主视图 Controller ),“ShowCommunities”,我有一个 TableView,它将使用来自 API 调用的数据进行填充。

表格根本没有显示。

我在函数中放置了一个 print 命令来计算有多少行,但它没有报告任何行。

我已经打印了 API 调用的输出,并返回以下内容:

names: [Optional("Steve Jones"), Optional("Brad Walker")]

我已经复制了与主视图 Controller “ View Controller ”上的上一个表相同的功能并进行了设置,并且没有收到任何错误...

但我显然错过了一些东西。

这是我的代码:

import UIKit

class ShowCommunityViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var membersTableView: UITableView!

@IBOutlet weak var communityName: UILabel!
var communityIsCalled: String?
var comIds =  [String]()
var communityId: Int?

var communityPlayerIds =  [String]()
var selectedCellTitle: String?
var cellId: Int?

var communityPlayers =  [String?]()

override func viewDidLoad() {
    super.viewDidLoad()

    communityName.text = communityIsCalled
    self.membersTableView.delegate = self
    self.membersTableView.dataSource = self
    membersTableView.reloadData()
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    print (self.communityPlayers.count)
    return self.communityPlayers.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let title = self.communityPlayers[indexPath.row]
    let cell = UITableViewCell()
    cell.textLabel?.text = title
    return cell

}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    self.selectedCellTitle = self.communityPlayers[indexPath.row]
    cellId = indexPath.row
}

override func viewDidAppear(_ animated: Bool) {
    let myUrl = URL(string: "http://www.quasisquest.uk/KeepScore/specificCommunity.php?");
    var request = URLRequest(url:myUrl!);
    request.httpMethod = "POST";
    let postString = "id=\(comIds[communityId!])";

    request.httpBody = postString.data(using: String.Encoding.utf8);

    let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in

        DispatchQueue.main.async
            {

                if error != nil {
                    print("error=\(error)")
                    return
                }

                do{
                    let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String:AnyObject]

                  if let arr = json?["players"] as? [[String:String]] {
                        self.communityPlayerIds = arr.flatMap { $0["id"]!}
                        self.communityPlayers = arr.flatMap { $0["user_name"]!}

                       print ("names: ",self.communityPlayers)
                    }

                } catch{
                    print(error)
                }
        }
        }
    task.resume()
    membersTableView.reloadData()

}

}

我什至没有得到空白单元格。

print (self.communityPlayers.count) 命令输出:

0 0 0 0 0

有什么想法吗?

最佳答案

将membersTableView.reloadData()放入DispatchQueue.main.async中 self.communityPlayers 被分配后

关于ios - 这个 UITableView 没有显示在我的 View Controller 上的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40287860/

相关文章:

ios - UIScrollView 中的两个 UIViews 和一个 UICollectionView(或更好的方法)

ios - 从 iOS 创建 getStream 用户

swift - 是否所有 @Published 变量都需要在 SwiftUI 的 View 模型中具有初始值?

ios - TableView 从 : numberOfRowsInSection 中的最后一部分开始

IOS with Rails 后端 Amazon S3 直接上传

ios - ASIHTTPRequest 始终使用默认的 responseEncoding 而不是 XML 文件中提到的编码

ios - AVAudioPlayerNode 同时播放多首歌曲

ios - 表格 View 中单元格的动态高度不起作用

ios - 尝试删除包含拒绝辞职的第一响应者的行

ios - iPhone 设备不连接到应用程序中的本地服务器