我有一个tableView,在每个单元格中都有一个collectionView。有时当我知道collectionViews中有新数据时,我会在collectionView上调用reloadData()
。大多数情况下这个例程工作,但有时开始使用100%的CPU,内存使用量增加,GUI被阻止,并且应用程序将崩溃。如果我不重新加载collectionView,那么一切正常,只有collectionView中的内容无效。发生了什么,在iOS 8中从reloadData()
拨打cellForRowAtIndexPath
并不是问题。
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("movie") as! MovieTableViewCell
//..
if cell.rcvc == nil {
let cvfl = UICollectionViewFlowLayout()
cvfl.scrollDirection = .Horizontal
cell.rcvc = RatingCollectionViewController(collectionViewLayout: cvfl)
self.addChildViewController(cell.rcvc!)
let v = cell.viewWithTag(5)!
v.addSubview(cell.rcvc!.view)
cell.rcvc!.didMoveToParentViewController(self)
cell.rcvc!.view.frame = v.bounds
}
cell.rcvc!.movie = movie
if enableReloadRatingCollectionViews {
cell.rcvc!.collectionView!.reloadData() // <--- if I comment, not crashes
}
return cell
}
我更新了我的代码,例如@dasblinkenlight建议,我不再从reloadData
拨打cellforRowAtIndexPath
,但现在在确定时拨打reloadData
所有collectionView
表单用户交互触发它。但它有时会崩溃,任何想法为什么?
itemTableViewController!.tableView.reloadData()
for sv in collectionViews.allObjects {
(sv as! UICollectionView).reloadData()
}
答案 0 :(得分:0)
我没有重新加载嵌套的collectionView
,而是实现了configureCell
方法,重置了单元格,而对于我调用configureCell
的所有可见单元格。这是我的修复,因此无限循环可以避免。