2017-10-09 109 views
3

我將我的iOS應用程序代碼遷移到Swift 4,並且在我的集合視圖中重新載入數據方法不起作用。我搜索並嘗試了很多東西,但沒有人工作。它在Swift 3中工作了一個多月,所以我不知道發生了什麼。UICollectionView重載數據在swift中不起作用4

此代碼是案例之一:

private func setLevelLessons(){ 
     let operationsDB = DBOperations() 
     self.indexInformation = operationsDB.getIndex(forLevel: self.currentLevel) 
     self.numLessons = (self.indexInformation?.count)! 
     DispatchQueue.main.async { 
      self.lessonsCollectionView.reloadData() 
     } 
    } 

我調用此函數一個按鈕被點擊時。點擊時,我從數據庫中獲取數據並重新加載收藏視圖。我檢查數據是否正確,這不是問題。

我打印的項目時,下一個方法被調用,並在第一和第二次點擊被稱爲(在按鈕第二沒有必要,無論在屏幕)

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 

可能是什麼回事?

+0

檢查'numOfRowAtIndexPath'返回計 –

+0

@SalmanGhumsani該值是正確的,我把它從'numLessons'變量。 – CipherCit

+0

我遇到過類似的效果,對於我_ _ collectionView reloadData _ _之前的_ [collectionView.collectionViewLayout invalidateLayout] _工作。在我的情況下,collectionview-viewcontroller(obj-c)是一個快速視圖控制器的子視圖控制器。 – Apoc

回答

0

問題解決了。

我在更新到Swift4和Xcode 9.0時遇到了這個問題,但今天我將Xcode升級到9.0.1版本(昨天發佈),並且collectionView.reloadData()正在重新運行。所以,如果你有這個問題,確保你有最新的Xcode版本,或者等到下一個版本發佈。

+0

它仍然在Xcode 9.2,swift 4 –

0

這是swift4(Xcode 9)中的臨時解決方案。

DispatchQueue.main.async { 
    let numberOfItems = collectionView.numberOfItems(inSection: 0) 
    let indexPaths = [Int](0..<numberOfItems).map{ IndexPath(row: $0, section: 0) } 
    collectionView.reloadItems(at: indexPaths) 
} 
+0

不工作Xcode 9.2,swift 4 –

相關問題