2017-09-18 13 views
0

のうちは、私はこの致命的なエラー:インデックス範囲2つのカスタムセル

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 
     } 
    } 
} 

のようにそれらを構成し、2つのカスタムセル enter image description here

を持っているが、私はエラーを取得し、その範囲外のインデックス。誰かが私を助けることができる? 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 

UPDATE のみトップ上にあるように設計細胞であり、細胞はそれを下回っています。 enter image description here

+0

'if searchActive {return auxiliar!count; }これは、 'cellForRow()'で実装されているのと同じロジックを持つ必要があるため、他の場合はfilteredArr == nil {return allShops.count} else {return filteredArr.count} '(または' cellForRow 'numberOfRowsInSection'のonと同じロジックです)。 – Larme

+0

インデックスの範囲外エラーはどこで発生していますか? searchActiveはtrueまたはfalseですか? – iCyberPaul

+0

更新された質問を確認してください。セルは設計されたものだけです – leo0019

答えて

2

これを試してください。

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

あなたのallShopsはnilだと思います。 cellForRowAtで

+0

更新された質問を確認してください。セルはデザインのものだけです – leo0019

+0

@ leo0019インデックスが範囲外のエラーが発生するのはどこですか?教えてください。 –

+0

これはもう発生していません。私の質問で更新した画像を見てください。セルはすべて1色で表示され、クリックすると選択したショップに行きます。デザインのあるセルは表示されますが、太字のセルは表示されません(セルは表示されません) – leo0019

0

:あなたが持っているメソッド:

if searchActive{ 
    ... 
} else { 
    if filteredArr == nil { 
     ... 
    } else { 
     ... 
    } 
} 

しかしnumberOfRowsInSection中:あなたは

if searchActive { 
    ... 
} 
return ... 

を持っているおそらくあなたは両方法で同じロジックを実装することをお勧めします。

+0

更新された質問を確認してください。セルは設計上のものだけです – leo0019

関連する問題