2016-12-09 18 views
1

私はUITableViewのヘッダーにUICollectionViewを持っています。データがない場合は、collectionViewを削除します。私はprint(data)のEXC_BREAKPOINTがラインからクラッシュ "self.collectionView.reloadData()"UICollectionView reloadData - EXC_BREAKPOINT

var reccomend: [JSON]? = [] 

func loadReccomend(){ 
      YazarAPI.sharedInstance.loadReccomendedArticles({ reccomend in 
       if let data = reccomend["articles"].arrayValue as [JSON]?{ 
        self.reccomend = data 
        if (self.reccomend?.count)! < 1 { 
         self.tableView.tableHeaderView = nil 
        }else{ 
         self.collectionView.reloadData() 
        } 
       } 
      }) 
     } 

    func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int { 
       return 1 
      } 

      func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
       return self.reccomend?.count ?? 0 
      } 

      func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell { 
       let cell = collectionView.dequeueReusableCellWithReuseIdentifier("ReccomendCell", forIndexPath: indexPath) as! ReccomendedCollectionViewCell 
       cell.article = self.reccomend?[indexPath.row] 
       return cell 
      } 

して結果を取得しています :

[{ 
    "title" : "title0", 
    "author_email" : null, 
    "author_id" : 1884, 
    "read_count" : 0, 
    "is_favorite" : false, 

}, { 
    "title" : "title1", 
    "author_email" : null, 
    "author_id" : 1884, 
    "read_count" : 0, 
    "is_favorite" : false, 

}] 
+0

どのようにcollectionViewをtableViewヘッダとして返すのですか? viewForHeaderInSectionでこれらのケースを処理しましたか? –

答えて

0

あなたの他の部分の内側にガードを使用してみてください:

guard self.reccomend?.count > 0 else{ 
     return 
    } 
self.collectionView.reloadData() 
0

あなたがする必要があるが、いくつかのデータだけがある場合は、self.collectionView.reloadData()と呼んでください。あなたとアンラップ力であるため、

if (self.reccomend.count>0) 
{ 
    self.collectionView.reloadData() 
} 
0

アプリが破壊されています:このような(self.reccomend?.count)!

ここでプロパティreccomendはreccomend」はゼロであることも可能であることを意味しており、オプションです。あなたのケースでは、reccomendはnilです。なぜなら、!を追加すると、決してそれがゼロにならないことを知っていますし、アプリがクラッシュしてクラッシュするためです。

if let recommended = self.reccomend { 
    if recommended.count < 1 { 
    self.tableView.tableHeaderView = nil 
    } else { 
    self.collectionView.reloadData() 
    } 
} else { 
    //if self.reccomend is nil, do something 
} 

しかしyou-があなたの主な問題は、あなたがどのようなタイプのアレイself.reccomendので、何をチェックする必要がdata

に等しくなるように設定した後、self.reccomendがnilであるということであるためにそれはここでの主な問題ではありません配列dataのタイプは、それらが同じタイプであり、あなたが期待するJSON応答を得ていることを確認することです。そのため、ブレークポイントを設定して、それを把握してください。これがあなたの力の展開を失敗させる原因になります。

+0

self.reccomendで、データは同じタイプです。私は外部APIからJSONデータを取得しています。同じ問題をどのように複製できますか? –

+0

'self.reccomend'を設定する前に' data'を印刷できますか? 'self.reccomend'をプロパティとして宣言している場所も表示できますか?上記の質問に両方を追加してください。 'self.reccomend'は' var reccomend = [[String:AnyObject]]と宣言されていますか?それとも別のものですか? –

関連する問題