프로파일이 컬렉션보기에 표시되는 앱에 스크린을 구현하고 있습니다. 내 데이터가 Firebase에서 검색되고 있으며 처음으로 Firebase DatabaseUI를 사용하고 있습니다.'Assertion Failure'Collection 다루는 방법 Swift에서 Firebase DatabaseUI의 충돌을 봅니까?
쿼리를 작성한 다음 FUICollectionViewDataSource
을 만들고 셀을 큐에서 빼낸 다음 해당 데이터 소스를 collectionView에 연결합니다.
데이터 소스의 기능은 온라인과 오프라인 사용자 (쿼리에서 하위 키의 값을 확인) 사이를 전환하는 한 제대로 작동하지만 쿼리를 남성에서 여성으로 변경하면, 또는 여성을 남성에게 (새로운 쿼리 자체) 나는 NSInternalInconsistenencyException
과 충돌합니다.
*** 인해 캐치되지 않는 예외 'NSInternalInconsistencyException'응용 프로그램 종료, 이유는 : '잘못된 업데이트 : 기존 섹션에 포함 된 항목의 수는 업데이트 후 섹션 0의 항목 개수가 잘못 것은 (1)해야한다 업데이트 (1) 이전에 해당 섹션에 포함 된 항목 수와 같거나, 해당 섹션 (삽입 된 1 개, 삭제 된 0 개)에 삽입되거나 삭제 된 항목 수를 더하거나 뺀 값 또는 빼거나 이동 한 항목 수를 더한 값 그 섹션 (0은 안으로 움직이고 0은 밖으로 움직였다). '
*** 먼저 투사 호출 스택 : (0x18672d1b8 0x18516455c 0x18672d08c의 0x1871e502c의 0x18cedc14c의 0x18c7b1d4c 0x10020f594 0x1002102c8 0x1001eb3e0 0x101609258 0x101609218 0x10160e280 0x1866da810 0x1866d83fc 0x1866062b8 0x1880ba198 0x18c64d7fc 0x18c648534 0x1000c4200 0x1855e95b8) 의 libC++ abi.dylib : 입력 NSException의 캐치되지 제외 종결 내가 수집 전망을 짓고 있어요 때
,이 같은 단지 실행 명령을 사용 해요 :
collectionView.dataSource = collectionViewDataSource
self.collectionView.reloadData()
하지만 위와 같은 호출은 작동하지 않으며 UICollectionViewDataSource
프로토콜 함수를 사용하지 않고 섹션 당 항목 수가 다른 새로운 쿼리를 만들고 실행하고 표시하는 방법을 잘 모르겠습니다.
이러한 종류의 충돌을 처리하지 않기 위해 새 쿼리를 처리하기 전에 실행해야하는 기능은 무엇입니까?
collectionview의 indexPathsForVisibleItems
에서 모든 셀을 삭제하고 데이터를 다시로드하려고 시도했습니다 ... 주위에 collectionView.reloadData()
을 던져 버렸지 만 여전히 충돌합니다. 항상 그렇진 않지만 앱이 조만간 충돌 할 것입니다.
collectionView에서 새로운 검색어를 시작하고 NSInternalInconsistencyExceptions
을 처리하지 않으려면 어떻게해야합니까?
모두에게 감사드립니다. 나는 파이어베이스를 사랑하고 이것을 이해하고 싶다!
벤처로드가의 getUserData()
함수가 호출
-Reezy
. 쿼리가 변경되면 게시 된 알림에서resetQuery()
함수가 실행됩니다.
extension BrowseVC {
func getUserData() {
let isOnline = (segmentedControl.selectedSegmentIndex == 0) ? true : false
generateQuery(isOnline: isOnline)
populateDataSource()
}
func resetQuery() {
removeOldData()
getUserData()
}
func removeOldData() {
let indexPaths = collectionView.indexPathsForVisibleItems
collectionView.deleteItems(at: indexPaths)
// collectionView.reloadData()
}
func generateQuery(isOnline: Bool) {
if let selectedShowMe = UserDefaults.sharedInstance.string(forKey: Constants.ProfileKeys.ShowMe) {
let forMen = (selectedShowMe == Constants.ProfileValues.Men) ? true : false
query = FirebaseDB.sharedInstance.buildQuery(forMen: forMen, isOnline: isOnline)
} else {
query = FirebaseDB.sharedInstance.buildQuery(forMen: false, isOnline: isOnline)
}
}
func populateDataSource() {
if let query = query {
collectionViewDataSource = FUICollectionViewDataSource(query: query, view: collectionView, populateCell: { (view, indexPath, snapshot) -> ProfileCVCell in
if let cell = view.dequeueReusableCell(withReuseIdentifier: Constants.CollectionViewCellIdentifiers.ProfileCVCell, for: indexPath) as? ProfileCVCell {
if let userDictionary = snapshot.value as? [String: AnyObject] {
if let user = User(uid: snapshot.key, userDictionary: userDictionary) {
cell.populate(withUser: user)
}
}
return cell
}
return ProfileCVCell()
})
collectionView.dataSource = collectionViewDataSource
collectionView.reloadData()
// collectionView.performBatchUpdates({
// self.collectionView.dataSource = self.collectionViewDataSource
// }, completion: nil)
// collectionView.reloadData()
}
}
}
질문을 업데이트하십시오. 데이터 소스 추가 및 위임 방법 – iMHitesh