如何修复表视图单元格在启动时不显示?

Posted

技术标签:

【中文标题】如何修复表视图单元格在启动时不显示?【英文标题】:How to fix Table View Cells not showing on launch? 【发布时间】:2019-07-21 06:36:42 【问题描述】:

各位读者,您好, 首先,我需要说,我在这里阅读了很多类似的帖子,问题几乎相同,并且在我的项目中从这里实现了很多代码,我可以肯定地说我在同一页上仍然是空白表格视图。

我正在尝试将数据从 API 调用加载到表格视图单元格,主要是标题(仅文本),我成功完成了 API 调用并将 API 调用的数据存储到我将使用的数组中访问数据。

我尝试过的: - 在固定和自动行高之间交替 - 在 vi​​ewDidLoad() 上加载 tableView.delegate 和 tableView.dataSource,同时在 storyboard 中设置委托和数据源 - 在使用 forEach() 方法和在...中使用 for 'item' 之间交替使用 - 设置断点,但我根本没有到达它们,例如,我没有到达任何断点,如 'func tableView(_ tableview:...)' 也没有在控制台中打印来自这些函数的数据 - 在故事板表格视图单元格中放置一个标识符,并使用该标识符打印出单元格 - 在 vi​​ewWillLoad() 中使用 .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" 您不能为情节提要中的表格视图单元分配一个类。 添加了与表格视图单元格的类同名的标识符,并解决了整个问题!非常感谢!

以上是关于如何修复表视图单元格在启动时不显示?的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3 自定义单元格在滚动时更改

以 UIView 作为子视图创建的表格单元格在 iOS7 中不显示

UITableView 单元格在索引 0 中显示“null”值

UITableView 的 scrollToRowAtIndexPath 在单元格不显示时不起作用?

为啥我的单元格在我的 UITableView 中显示为空白?

UITableView 可重用的自定义单元格在子视图中显示错误的内容