我的UICollectionView
标题中有UITableView
。如果没有数据,我会删除collectionView。
我收到来自" self.collectionView.reloadData()
"
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 :(得分: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响应。因此,设置断点并弄清楚,因为这是使你的力量解包失败的原因,也是你为什么不应该强制打开任何类型的互联网响应的原因。