我在自定义UIViewController中设置了一个UITableView,我称之为SavingViewController。我已经将tableView的委托和数据源设置为SavingViewController,我相信我已经正确地设置了故事板中的所有标识符,但是保护语句中的致命错误总是被称为
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier = "WishlistTableViewCell"
guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? WishlistTableViewCell else {
fatalError("The dequeued cell is not an instance of WishlistTableViewCell.")
}
return cell
}
As is the TableViewCell Identifier
------完整代码-------
import UIKit
class SavingViewController: UIViewController {
var totalSavings: Double = 0
var items: [WishListItem] = []
@IBOutlet weak var savingsView: UIView!
@IBOutlet weak var wishlistView: UIView!
@IBOutlet weak var scroll: UIScrollView!
@IBOutlet weak var wishlistTitle: UILabel!
@IBOutlet weak var savingsLabel: UILabel!
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var toolbar: UIToolbar!
override func viewDidLoad() {
super.viewDidLoad()
items = DummyPurchaseData.returnDummyItemsArray()
tableView.register(UITableViewCell.self,
forCellReuseIdentifier: "WishlistTableViewCell")
tableView.reloadData()
let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addWishButton(_:)))
let editButton = editButtonItem
let flexibleSpace = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil);
toolbar.items = [editButton, flexibleSpace, addButton]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func addWishButton(_ sender: UIBarButtonItem){
//addWish()
print("Do nothing")
}
func addItemToWishlist(item: WishListItem) {
items.append(item)
}
}
extension SavingViewController: UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView,
numberOfRowsInSection section: Int) -> Int {
return items.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cellIdentifier = "WishlistTableViewCell"
guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? WishlistTableViewCell else {
fatalError("The dequeued cell is not an instance of WishlistTableViewCell.")
}
return cell
}
func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
// Return false if you do not want the specified item to be editable.
return true
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {
items.remove(at: indexPath.row)
tableView.deleteRows(at: [indexPath], with: .fade)
} else if editingStyle == .insert {
// Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
}
}
}
答案 0 :(得分:1)
不需要这一行 - :
tableView.register(UITableViewCell.self,
forCellReuseIdentifier: "WishlistTableViewCell")
您正在使用界面构建器而不是以编程方式执行此操作。删除它,它将工作。
答案 1 :(得分:0)
不是
tableView.register(UITableViewCell.self,
forCellReuseIdentifier: "WishlistTableViewCell")
你应该:
tableView.register(WishlistTableViewCell.self,
forCellReuseIdentifier: "WishlistTableViewCell")