我有一个包含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
}
}
故事板中的所有连接都已正确配置。
当我运行此代码时,它会出现以下错误:
但是,当我删除UITableViewDataSource协议时,异常就会消失。
请告诉我如何修复例外情况。
编辑:
我刚刚发现异常是:
let cell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath) as! RestaurantMapTableViewCell
言。
但我不知道如何修复它,我已经尝试设置标识符并将类分配给单元格。
答案 0 :(得分:3)
您的代码看起来很好,所以我提供了一种帮助查找问题的方法。
首先,在句子上创建一个断点:
return UserBusinesses.returnedBusinesses.count
检查returnBusinesses是否为零。如果通过此检查,请继续第二次检查,在句子上创建一个断点:
let cell = tableView.dequeueReusableCell(...
正常情况下,这些步骤可以帮助您找到问题所在。
如果问题出在句子“let cell = tableView.dequeueReusableCell”上,你可能忘记设置单元格的标识符:
答案 1 :(得分:0)
重新检查上述Yun Chen指出的内容后,如果再次失败,请验证heightforrow方法。如果您在非自动布局的单元格上使用自动尺寸,则会在加载时崩溃。