UICollectionView reloadData - EXC_BREAKPOINT

时间:2016-12-09 06:33:03

标签: ios swift tableview collectionview

我的UICollectionView标题中有UITableView。如果没有数据,我会删除collectionView。 我收到来自" self.collectionView.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,

}]

3 个答案:

答案 0 :(得分:0)

尝试在你的其他部分使用警卫:

compile

答案 1 :(得分:0)

你需要检查一下,如果只有一些数据,那么请致电self.collectionView.reloadData()。像这样:

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

答案 2 :(得分:0)

您的应用程序正在破解,因为您正在使用以下方式展开:(self.reccomend?.count)!

此处的属性reccomend是可选的,这意味着可能会推荐&#39;没有。在你的情况下,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响应。因此,设置断点并弄清楚,因为这是使你的力量解包失败的原因,也是你为什么不应该强制打开任何类型的互联网响应的原因。