运行时错误消息:loadView 实例化视图控制器,标识符为 ViewController 来自情节提要主,但未获取 TableView

Runtime Error message: loadView instantiated view controller with identifier ViewController from storyboard Main,but didn't get a TableView

提问人:emsiloader 提问时间:4/12/2021 更新时间:4/12/2021 访问量:127

问:

我正在尝试使用 swift 开发一个 iOS 应用程序,在 UItableview 中有一个自定义单元格。

1 - 我的控制者的(个人信息)代码:

import UIKit

struct CellData {
let image: UIImage?
let message: String?
}

class personalinformation: UITableViewController {

var data = [CellData]()
override func viewDidLoad() {
    super.viewDidLoad()
    data = [CellData.init(image: UIImage(named: "sampleimage1"), message: "this is first one"), CellData.init(image: UIImage(named: "sampleimage2"), message: "this is second one"), CellData.init(image: UIImage(named: "sampleimage3"), message: "this is third one"), CellData.init(image: UIImage(named: "sampleimage4"), message: "this is last one")]
    self.tableView.register(acustomcell.self, forCellReuseIdentifier: "custom")
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = self.tableView.dequeueReusableCell(withIdentifier: "custom") as! acustomcell
    cell.myimage = data[indexPath.row].image
    cell.mymessage = data[indexPath.row].message
    return cell
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return data.count
}
}

2 - 自定义单元格代码在这里,基本上创建一个简单的自定义单元格文件(CustomCell.swift):

import UIKit
class acustomcell: UITableViewCell {

var mymessage: String?
var myimage: UIImage?

var messageView: UITextView = {
    var textView = UITextView()
    textView.translatesAutoresizingMaskIntoConstraints = false
    return textView
}()

var myimageView: UIImageView = {
    var imageView = UIImageView()
    imageView.adjustsImageSizeForAccessibilityContentSizeCategory = false
    return imageView
}()

override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?)
{
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    self.addSubview(myimageView)
    self.addSubview(messageView)
    
    myimageView.leftAnchor.constraint(equalTo: self.leftAnchor).isActive = true
    myimageView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
    myimageView.bottomAnchor.constraint(equalTo: self.bottomAnchor).isActive = true
    myimageView.widthAnchor.constraint(equalTo: self.widthAnchor).isActive = true
    
    messageView.leftAnchor.constraint(equalTo: self.myimageView.rightAnchor).isActive = true
    messageView.rightAnchor.constraint(equalTo: self.myimageView.rightAnchor).isActive = true
    messageView.bottomAnchor.constraint(equalTo: self.myimageView.bottomAnchor).isActive = true
    messageView.topAnchor.constraint(equalTo: self.myimageView.topAnchor).isActive = true
}

override func layoutSubviews() {
    super.layoutSubviews()
    if let mymessage = mymessage {
        messageView.text = mymessage
    }
    if let myimage = myimage {
        myimageView.image = myimage
    }
}

required init?(coder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
}

一切看起来都正常,但在运行时,当我在模拟器打开视图时收到以下错误消息(没有编译器错误):

Thread 1: "-[UITableViewController loadView] instantiated view controller with identifier \"UIViewController-dtk-hv-3QF\" from storyboard \"Main\", but didn't get a UITableView."
iOS Swift Xcode UITableView

评论

0赞 Paulw11 4/12/2021
该错误解释了问题。您正在进行子类化,但场景的根视图不是 您需要确保将表视图分配给视图控制器的出口,或者如果您希望根视图是其他东西,则需要子类UITableViewControllerUITableViewviewUIViewController
0赞 Savitha 4/12/2021
请检查您的主故事板。错误是说它无法从 UITableViewController 获取 tableview。确保将 personalinformation 映射到 Storyboard 中的 UItableViewController
0赞 emsiloader 4/12/2021
是的,我在视图布局中将 TableviewController(个人信息)挂接到 tableview,看起来,这是一个 Xcode 问题,当我挂钩它时,之前的钩子没有被删除。我完全删除了视图并添加了一个新视图,然后将所有代码添加回具有相同名称(personalinformation)的新 Tableviewcontroller,并再次将其挂钩到 tableview。成功了。

答:

0赞 Shehata Gamal 4/12/2021 #1

看这里是拖动常用的 vc 和表模板 vc 的区别(您应该选择选项 1)

enter image description here