2016-03-28 47 views
1

我有一些代码,当你点击相关的UICollectionViewCell时,会提高分数。代码如下:reloadItemsAtIndexPath swift错误?

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) { 
     teamScores[indexPath.row] += 1 
     collectionView.reloadItemsAtIndexPaths([indexPath]) 
} 

这最初工作正常,但是当我返回到主屏幕,并返回到应用程序再次,应用程序会出现冻结,如果我尝试再次单击该单元格。仔细观察,似乎是在某种循环中,CPU以100%的速度运行,并且所需的内存每秒都在增加。

请注意,如果不是点击某个单元格,而是执行另一个操作,就我所知,没有问题。唯一的例外是一个复位按钮,它运行的代码:

@IBAction func resetScores(sender: AnyObject) { 
     resetScores() 
     collectionView.reloadSections(NSIndexSet(index: 0)) 
} 

这“崩溃”只与应用程序被激活再次发生 - 当你切换到另一个选项卡,再回来就不会发生。

如果我将reloadItemsAtIndexPaths(...)代码替换为reloadData(),问题就会消失。这是一个错误,还是我错过了什么?

非常感谢提前!

回答

0

您可以尝试取消选择该单元格,因为它保持选定状态。

尝试添加:

collectionView.deselectItemAtIndexPath(indexPath, animated : false) 

你之后:

teamScores[indexPath.row] += 1 

,看看是否能解决您的问题。

- 编辑 -

override func viewWillAppear() { 
    super.viewWillAppear() 
    collectionView.reloadData() 
} 
+0

这没有遗憾的工作:( – Ben

+0

你能否将这个方法添加到类(见原职的编辑) – Emptyless

+0

没有运气,要么! – Ben