2016-12-09 5 views
1

У меня есть UICollectionView в заголовке моего UITableView. Я удаляю collectionView, если данных нет. Я получаю 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 
      } 

И результат print(data):

[{ 
    "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 ничтожно, потому что, когда вы добавляете!, Вы сообщаете нам, что знаете, что он никогда не будет никчемным, и если это приложение сбой, и поэтому он сработает.

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 
} 

Но это не главная проблема здесь Вы- главной проблемой является то, что self.reccomend равна нулю после того, как вы установите его равным data

Вы должны проверить, какой тип массива self.reccomend и что тип массива data должен убедиться, что они одного типа и что вы получаете ответ JSON, который вы ожидаете. Таким образом, установите контрольные точки и определите это, потому что это то, что заставляет развернуть вашу силу, а также почему вы никогда не должны принудительно разворачивать какой-либо интернет-ответ.

+0

self.reccomend и данные одного типа. Я получаю данные JSON от внешнего api. Как я могу воспроизвести ту же проблему? –

+0

Можете ли вы напечатать 'data', прежде чем вы установите' self.reccomend' равным ему? Можете ли вы также показать, где вы объявляете 'self.reccomend' как свойство? Добавьте оба вопроса к вашему вопросу выше. Является ли 'self.reccomend' объявленным как' var reccomend = [[String: AnyObject]]? Или это что-то еще? –

 Смежные вопросы

  • Нет связанных вопросов^_^