这个UITableView没有出现在我的视图控制器上的原因是什么?

时间:2016-10-27 14:54:44

标签: ios swift uitableview

我有第二个视图控制器(不是我的主视图)," ShowCommunities"我有一个TableView,它将填充来自API调用的数据。

表格根本没有显示出来。

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

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

  

姓名:[可选(" Steve Jones"),可选(" Brad Walker")]

我复制了相同的功能并设置了我在主视图控制器上用于上一个表的功能," 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

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

将membersTableView.reloadData()放在DispatchQueue.main.async中 在self.communityPlayers获得分配后