如何修复表视图单元格在启动时不显示?
Posted
技术标签:
【中文标题】如何修复表视图单元格在启动时不显示?【英文标题】:How to fix Table View Cells not showing on launch? 【发布时间】:2019-07-21 06:36:42 【问题描述】:各位读者,您好, 首先,我需要说,我在这里阅读了很多类似的帖子,问题几乎相同,并且在我的项目中从这里实现了很多代码,我可以肯定地说我在同一页上仍然是空白表格视图。
我正在尝试将数据从 API 调用加载到表格视图单元格,主要是标题(仅文本),我成功完成了 API 调用并将 API 调用的数据存储到我将使用的数组中访问数据。
我尝试过的: - 在固定和自动行高之间交替 - 在 viewDidLoad() 上加载 tableView.delegate 和 tableView.dataSource,同时在 storyboard 中设置委托和数据源 - 在使用 forEach() 方法和在...中使用 for 'item' 之间交替使用 - 设置断点,但我根本没有到达它们,例如,我没有到达任何断点,如 'func tableView(_ tableview:...)' 也没有在控制台中打印来自这些函数的数据 - 在故事板表格视图单元格中放置一个标识符,并使用该标识符打印出单元格 - 在 viewWillLoad() 中使用 .reloadData()
extension HomeViewController: UITableViewDelegate
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)
tableView.deselectRow(at: indexPath, animated: true)
let item = items[indexPath.row]
print("Selected Item: \(item)")
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return 100.0;
extension HomeViewController: UITableViewDataSource
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return items.count
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
print("CURRENT INDEX PATH BEING CONFIGURED: \(indexPath)")
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: ShowsTableViewCell.self), for: indexPath) as! ShowsTableViewCell
cell.configure(with: items[indexPath.row])
// let something: Show
// something = items[indexPath.row]
//
// cell.titleTVShow.text = something.title
return cell
switch response.result
case .success(let shows):
print("Succes: \(shows)")
shows.forEach show in
self.items.append(show)
case .failure(let error):
print("Eror: \(error)")
extension ShowsTableViewCell
func configure(with item: Show)
titleTVShow.text = item.title
thumbnailTVShow.image = nil
struct Show: Codable
let idShow: String
let title: String
let imageUrl: String
let likesCount: Int
enum CodingKeys: String, CodingKey
case idShow = "_id"
case title
case imageUrl
case likesCount
我没有收到任何错误。 API 继续成功并在控制台中打印出来自 json 的数据。我希望从 tableView 中的 API 调用加载数据,但这没有发生。
【问题讨论】:
@CordFlakes 首先尝试调试是否调用了表视图委托和数据源方法。然后在 API 响应存储在数组中后重新加载表视图。在此之后,self.items.append(show) 如果我可以问你是怎么做到的?顺序是什么,我应该把附加代码放在哪里? (我对 swift 真的很陌生)@ArpitDhamane 【参考方案1】:首先尝试调试表视图委托和数据源方法是否被调用。然后在 API 响应存储在数组中后重新加载表视图。在此之后,self.items.append(show)。
试试这个。
switch response.result
case .success(let shows):
print("Succes: \(shows)")
shows.forEach show in
self.items.append(show)
self.tableView.reloadData()
case .failure(let error):
print("Eror: \(error)")
【讨论】:
得到以下信息:错误:由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法使具有标识符 ShowsTableViewCell 的单元格出列 - 必须为标识符注册 nib 或类或连接原型故事板中的单元格',还:“-[UITableView _dequeueReusableCellWithIdentifier:forIndexPath:usingPresentationValues:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore_Sim/UIKit-3698.103.12/UITableView.m 中的断言失败: 8054" 您不能为情节提要中的表格视图单元分配一个类。 添加了与表格视图单元格的类同名的标识符,并解决了整个问题!非常感谢!以上是关于如何修复表视图单元格在启动时不显示?的主要内容,如果未能解决你的问题,请参考以下文章
以 UIView 作为子视图创建的表格单元格在 iOS7 中不显示
UITableView 单元格在索引 0 中显示“null”值
UITableView 的 scrollToRowAtIndexPath 在单元格不显示时不起作用?