Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift TableViewCell.xib不';不显示在tableview上_Swift_Uitableview_Tableview - Fatal编程技术网

Swift TableViewCell.xib不';不显示在tableview上

Swift TableViewCell.xib不';不显示在tableview上,swift,uitableview,tableview,Swift,Uitableview,Tableview,这是我的代码,它应该在customs tableviewcell.xib中显示firebase数据库中的用户,但是当启动应用程序时,tableview保持为空,我真的不知道代码中有什么错误或缺少什么,我认为这是一个非常简单的错误,但我无法找出它。 提前感谢那些愿意回答的人 import UIKit import Firebase class UsersTableView: UIViewController, UITableViewDelegate, UITableViewDataSource {

这是我的代码,它应该在customs tableviewcell.xib中显示firebase数据库中的用户,但是当启动应用程序时,tableview保持为空,我真的不知道代码中有什么错误或缺少什么,我认为这是一个非常简单的错误,但我无法找出它。 提前感谢那些愿意回答的人

import UIKit
import Firebase
class UsersTableView: UIViewController, UITableViewDelegate, UITableViewDataSource {

// Outlets.
@IBOutlet weak var tableview: UITableView!

// Var.
var user = [User]()

override func viewDidLoad() {
    super.viewDidLoad()


    retrieveUsers()

    // Do any additional setup after loading the view.
}

func retrieveUsers() {
    let ref = Database.database().reference()
    ref.child("users").queryOrderedByKey().observeSingleEvent(of: .value, with: { DataSnapshot in

        let users = DataSnapshot.value as! [String: AnyObject]
        self.user.removeAll()
        for (_, value) in users{
            //let uid = Auth.auth().currentUser!.uid
            if let uid = value["userID"] as? String{
                if uid != Auth.auth().currentUser!.uid {
                    let userToShow = User()
                    if let fullName = value["username"] as? String , let imagePath = value["photoURL"] as? String {
                        userToShow.username = fullName
                        userToShow.imagePath = imagePath
                        userToShow.userID = uid
                        self.user.append(userToShow)

                    }
                }
            }
        }
        self.tableview.reloadData()
    })
    ref.removeAllObservers()
}

func numberOfSections(in tableView: UITableView) -> Int {
    return  1
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
    let cell = tableview.dequeueReusableCell(withIdentifier: "UserCell", for: indexPath) as! UserTableViewCell

    cell.nameLabel.text = self.user[indexPath.row].username
    cell.userID = self.user[indexPath.row].userID
    cell.userImage.downloadImage(from: self.user[indexPath.row].imagePath!)
    //checkFollowing(indexPath: indexPath)

    return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return user.count ?? 0
}
  }

  extension UIImageView{

func downloadImage(from imgURL: String!) {
    let url = URLRequest(url: URL(string: imgURL)!)

    let task = URLSession.shared.dataTask(with: url) { (data, response, error) in

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

        DispatchQueue.main.async {
            self.image = UIImage(data: data!)
        }
    }
    task.resume()
}
  }

如果您尚未在故事板中为
tableView
设置委托和数据源,请以编程方式执行:

override func viewDidLoad() {
    super.viewDidLoad()

   //Add these 2 lines, might be missed.
    self.tableview.delegate = self
    self.tableview.dataSource = self

    retrieveUsers()
}
检查表:

  • 设置tableView委托和数据源

    self.tableview.delegate=self

    self.tableview.dataSource=self

  • 已注册的自定义
    tableViewCell

    让cellNIb=UINib.init(nibName:“标识符\名称”,bundle:nil) 寄存器(cellNIb,forCellReuseIdentifier:identifier)

  • 检查
    func tableView(tableView:UITableView,numberofrowsinssection:Int)->Int的返回计数
    ​


  • 有两件事你忘记了:

    • 将表视图的
      dataSource
      设置为控制器。如果不这样做,您的
      tableView
      将不需要任何数据。因此,在控制器的
      viewDidLoad

      tableview.dataSource = self
      
      tableview.register(UINib(nibName: "UserCardTableViewCell", bundle: nil), forCellReuseIdentifier: "UserCell")
      
    • 如果您为单元格创建了自定义xib,请不要忘记为表视图注册自定义单元格(也可以在
      viewDidLoad
      中注册)


    如果您还需要
    UITableViewDelegate
    方法,如
    didSelectRowAt
    ,请不要忘记将表视图的
    delegate
    也设置为控制器

    tableview.delegate = self
    

    我看到这里有两个台阶。您是否正在将数据发送给
    用户
    ?如果是,那么您可以检查您的tableViewCell数据I保持为空@RobertDreslerI将数据获取给用户,但不获取表视图,因此表视图@lohithkorupolu可能有问题首先在
    viewdilad()
    中注册单元格。谢谢,这正是缺少的内容,我也缺少了:tableview.register(UINib(nibName:“UserCardTableViewCell”,bundle:nil),强制重用标识符:“UserCell”)