笔尖文件未在viewDidLoad

问题描述

我第一次尝试基于笔尖的项目,这是我的步骤和笔尖区域快照

Nib area snapshot

当前错误-Thread 1: Exception: "invalid nib registered for identifier (Cell) - nib must contain exactly one top level object which must be a UITableViewCell instance"

步骤1-我创建一个名为HotelNib的笔尖文件,并添加一个viewCotroller,创建一个名为HotelViewController: UIViewController的类,并将其附加到viewController

第2步-在笔尖中将tableView添加到viewController,为其赋予约束条件

第3步-转到SceneDelegate添加以下代码,因为我不希望加载情节提要,也请从下拉菜单删除主要内容

guard let winScene = (scene as? UIWindowScene) else { return }
        window = UIWindow(windowScene: winScene)
        guard let homeController = Bundle.main.loadNibNamed("HotelNib",owner: self,options: nil)?.first as? HotelViewController else { return }
        window?.rootViewController = homeController
        window?.makeKeyAndVisible()

第4步-我运行项目,它运行良好

第5步-在笔尖区域添加tableViewCell,创建一个名为ItemViewCell: UITableViewCell的类

第6步-在HotelView Controller中添加@IBOutlet weak var tableView: UITableView!,通过控件添加委托和数据源,然后从tableView拖动到viewcontroller

第7步-在@IBOutlet weak var nameLabel: UILabel!中创建ItemViewCell

第8步-我在HotelViewController中的代码,我只是无法克服,关于笔尖无法注册错误提示错误

class HotelViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {
    
    @IBOutlet weak var tableView: UITableView!
    var restaurantNames = ["Cafe Deadend","Homei","Teakha","Cafe Loisl","Petite Oyster","For Kee Restaurant","Po's Atelier","Bourke Street Bakery","Haigh's Chocolate","Palomino Espresso","Upstate","Traif","Graham Avenue Meats And Deli","Waffle & Wolf","Five Leaves","Cafe Lore","Confessional","Barrafina","Donostia","Royal Oak","CASK Pub and Kitchen"]
    
    func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int {
        restaurantNames.count
    }
    
    func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell",for: indexPath) as! ItemViewCell
        cell.nameLabel.text = restaurantNames[indexPath.row]
        return cell
    }
    

    override func viewDidLoad() {
        super.viewDidLoad()
        print("right load")
        tableView.delegate = self
        tableView.dataSource = self
        let nib = UINib(nibName: "HotelNib",bundle: nil)
        tableView.register(nib,forCellReuseIdentifier: "Cell") //always fails here
        
        // Do any additional setup after loading the view.
    }
    

}

解决方法

在单个.xib文件中具有多个视图也会导致此错误。在各自独立的.xib文件中创建表格视图单元格将解决此错误。