UITableViewDataSource导致libc ++ abi.dylib:以NSException类型的未捕获异常终止

时间:2016-12-22 12:01:41

标签: ios swift uitableview nsexception

我有一个包含UITableView的ViewController:

import UIKit
import GoogleMaps

class RestaurantMapViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var mapView: GMSMapView!
    @IBOutlet weak var tableView: UITableView!

    var cameraPosition: GMSCameraPosition!
    var zoomLevel: Double = 15

    override func viewDidLoad() {

        NotificationCenter.default.addObserver(self, selector: #selector(RestaurantMapViewController.updateEntries), name: NSNotification.Name(rawValue: "UpdateEntries"), object: nil)


        let nib = UINib(nibName: "RestaurantMapTableViewCell", bundle: nil)
        self.tableView.register(nib, forCellReuseIdentifier:"RestaurantMapTableViewCell")
        tableView.delegate = self
        tableView.dataSource = self
    }

    // MARK: Notifications

    @objc private func updateEntries() {

        DispatchQueue.main.async {
            self.tableView.reloadData()
            print("Data reloaded in Maps view")
        }
    } 

    // MARK: TableView methods

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        print("Initiating in Cells Mapview")

        return UserBusinesses.returnedBusinesses.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        print("Writing in Cells Mapview")

        let identifier = "RestaurantMapTableViewCell"
        let cell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath) as! RestaurantMapTableViewCell

        let business = UserBusinesses.returnedBusinesses[indexPath.row]

        cell.restaurantName.text = business.name
        cell.restaurantTags.text = business.tags
        cell.ratingControl.rating = Int(business.rating)


        return cell
    }

}

故事板中的所有连接都已正确配置。

当我运行此代码时,它会出现以下错误:

enter image description here

但是,当我删除UITableViewDataSource协议时,异常就会消失。

请告诉我如何修复例外情况。

编辑: 我刚刚发现异常是: let cell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath) as! RestaurantMapTableViewCell 言。

但我不知道如何修复它,我已经尝试设置标识符并将类分配给单元格。

2 个答案:

答案 0 :(得分:3)

您的代码看起来很好,所以我提供了一种帮助查找问题的方法。

首先,在句子上创建一个断点:

return UserBusinesses.returnedBusinesses.count

检查returnBusinesses是否为零。如果通过此检查,请继续第二次检查,在句子上创建一个断点:

let cell = tableView.dequeueReusableCell(...

使用此按钮逐步执行,直到崩溃的句子: enter image description here

正常情况下,这些步骤可以帮助您找到问题所在。

如果问题出在句子“let cell = tableView.dequeueReusableCell”上,你可能忘记设置单元格的标识符:

enter image description here

或者忘记设置自定义类: enter image description here

答案 1 :(得分:0)

重新检查上述Yun Chen指出的内容后,如果再次失败,请验证heightforrow方法。如果您在非自动布局的单元格上使用自动尺寸,则会在加载时崩溃。