2016-03-28 72 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