TableViewCell:出列的单元格不是标识为

时间:2017-08-26 08:13:56

标签: ios swift uitableview

我在自定义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
}

Restoration ID is set

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
        }
    }
}

2 个答案:

答案 0 :(得分:1)

不需要这一行 - :

tableView.register(UITableViewCell.self,
                           forCellReuseIdentifier: "WishlistTableViewCell")

您正在使用界面构建器而不是以编程方式执行此操作。删除它,它将工作。

答案 1 :(得分:0)

不是

tableView.register(UITableViewCell.self,
               forCellReuseIdentifier: "WishlistTableViewCell")

你应该:

tableView.register(WishlistTableViewCell.self,
               forCellReuseIdentifier: "WishlistTableViewCell")