1

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의 결과가 다른 셀을 추가하면 뷰보다 많은 셀이 표시되어 새로 고침하는 동안 오류가 발생합니다.

The error is this line

감사합니다!

+0

loadData() 호출의 맨 위에있는 빈 배열에 cloudData를 설정하는 것처럼 보입니다. 컬렉션보기를 다시로드하지 말라는 의미는 아닙니다. 해당 행을 제거하면 perform() 호출에서 배열의 내용이 대체됩니다. – Tim

+0

감사합니다 !! 그것은 전체의 문제이었다!! – rjgodoy

+0

당신은 환영합니다 :) 대답으로 내 의견을 추가했습니다. – Tim

답변

1

당신은 다시로드 컬렉션 뷰를 이야기하지 않고 loadData() 호출의 상단에 빈 배열로 cloudData을 설정하고 있습니다. 해당 행을 제거하면 perform() 호출에서 배열의 내용이 대체됩니다. 컬렉션 뷰는 아웃 오브 바운드 인덱스의 결과로, 콜렉션 뷰와 데이터 소스 사이의 불일치를 만들를 다시로드하지 않고

.

관련 문제