CollectionView가 발생합니다. 심각한 오류 : UIRefreshControl을 사용하여 데이터를 다시로드 할 때 인덱스가 범위를 벗어납니다.CollectionView - 치명적인 오류 : 인덱스가 범위를 벗어남 - 뷰보다 많은 셀이 표시 될 수 있습니다.
컬렉션과 같이 구성된다 :
@objc func loadData() {
cloudData = [CKRecord]()
let publicData = CKContainer.default().publicCloudDatabase
let predicate = NSPredicate(value: true)
let query = CKQuery(recordType: "Data", predicate: predicate)
query.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
publicWhisper.perform(query, inZoneWith: nil, completionHandler: { (results, error) in
if let datos = results {
self.cloudData = datos
DispatchQueue.main.async {
self.collectionView?.reloadData()
self.refresh.endRefreshing()
}
}
})
}
다만큼 세포의 수가보기 보여줄 수보다 작은 미세한 작동 :
가override func numberOfSections(in collectionView: UICollectionView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of items
return cloudData.count
}
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! DataViewCell
// Configure the cell
cell.cloudDataPost = cloudData[indexPath.item]
return cell
}
데이터를 새로 고침하기위한 기능이있다 . 4 또는 7 셀로 내가 문제없이 collectionView를 다시로드 할 수 있지만 array.count의 결과가 다른 셀을 추가하면 뷰보다 많은 셀이 표시되어 새로 고침하는 동안 오류가 발생합니다.
감사합니다!
loadData() 호출의 맨 위에있는 빈 배열에 cloudData를 설정하는 것처럼 보입니다. 컬렉션보기를 다시로드하지 말라는 의미는 아닙니다. 해당 행을 제거하면 perform() 호출에서 배열의 내용이 대체됩니다. – Tim
감사합니다 !! 그것은 전체의 문제이었다!! – rjgodoy
당신은 환영합니다 :) 대답으로 내 의견을 추가했습니다. – Tim