致命错误:索引超出范围的两个自定义单元格

Posted

技术标签:

【中文标题】致命错误:索引超出范围的两个自定义单元格【英文标题】:fatal error: Index out of range two custom cells 【发布时间】:2017-09-18 12:20:39 【问题描述】:

我有两个自定义单元格

我是这样配置的

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    if searchActive
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! ShopTableViewCell
        let entry1 = auxiliar?[indexPath.row]
        cell.shopImage.hnk_setImage(from: URL(string: (entry1?.Logo)!))
        cell.shopName.text = entry1?.shopname

        cell.backgroundColor = UIColor(white: 1 , alpha : 0.5)
        return cell
     else 
        if filteredArr == nil 
            let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! ShopTableViewCell

            let entry = shops[indexPath.row]

            cell.shopImage.hnk_setImage(from: URL(string: entry.Logo))
            cell.shopName.text = entry.shopname

            cell.backgroundColor = UIColor(white: 1 , alpha : 0.5)
            return cell
         else 
            let cell2 = tableView.dequeueReusableCell(withIdentifier: "design", for: indexPath) as! DesignTableViewCell
            let entry2 = filteredArr[indexPath.row]// error here 

            cell2.deignImage.hnk_setImage(from: URL(string: "http://jaee.com/upload/img/\(entry2.design)"))

            cell2.backgroundColor = UIColor(white: 1 , alpha : 0.5)
            return cell2
        
    

但我得到一个索引超出范围的错误。有人能帮我吗。我认为这是因为 numberOfRowsInSection

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    if searchActive 
        return auxiliar!.count
    
    return allShops.count
 

这是我保存数据的方式。我正在过滤商店。有设计的商店应该在design 单元格中,其余的应该在Cell 中。

var info = Shops(shopname: shopName, Logo: logoString, family_id: familiy_id , design : designImage )

self.shops.append(info)
self.filteredArr = self.shops.filter  $0.design != nil 
self.NofilteredArr =  self.shops.filter  $0.design == nil 
self.allShops = self.NofilteredArr + self.filteredArr

更新 我想要的是设计单元仅位于顶部,而单元位于其下方。

【问题讨论】:

if searchActive return auxiliar!.count; else if filteredArr == nil return allShops.count else return filteredArr.count 因为这需要与cellForRow() 中实现的逻辑相同(或cellForRow() 必须与numberOfRowsInSection 中的逻辑相同)。 索引超出范围错误发生在哪里? searchActive 是真是假? 检查更新的问题。细胞只是设计细胞 【参考方案1】:

试试这个。

 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
        if searchActive 
            return auxiliar!.count
        else
             if filteredArr == nil 
                shops.count
             else
                filteredArr.count
            
        
    

我认为你的 allShops 是零。

【讨论】:

检查更新的问题。细胞只是设计细胞 @leo0019 索引超出范围错误发生在哪里?请告诉我。 它不再发生了。看看我在我的问题中更新的图像。单元格都是一种颜色,当我点击它时,我会去选定的商店。显示有设计的单元格,但没有的单元格是粗体(Cell 不显示)【参考方案2】:

在 cellForRowAt: 方法中你有:

if searchActive
    ...
 else 
    if filteredArr == nil 
        ...
     else 
        ...
    

但是在 numberOfRowsInSection: 你有

if searchActive 
    ...

return ...

您可能希望在这两种方法中实现相同的逻辑。

【讨论】:

检查更新的问题。细胞只是设计细胞

以上是关于致命错误:索引超出范围的两个自定义单元格的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:单击特定单元格进行 segue 时索引超出范围

(Swift) 致命错误:索引超出范围

删除 UITableView 中的最后一个单元格时索引超出范围

致命错误:索引超出范围搜索项目

Swift,CollectionView,致命错误:索引超出范围

当我使用单元格时索引超出范围(Swift)