제목에서 알 수 있듯이 사용자가 목록의 맨 아래로 스크롤 할 때 더 많은 행을 uitableview에 삽입하려고합니다. 전체적인 이유는 대규모 데이터 세트로 인해 성능상의 이유로 데이터를 지연로드하는 것입니다.사용자가 빠르게 스크롤하는 경우에만 tableView : willDisplayCell : forRowAtIndexPath의 endUpdates에서 insertRowsAtIndexPaths가 충돌합니다.
이상한 것은 내가 천천히 이동하면 그때는 잘 작동한다는 것입니다,하지만 난 빠르게 스크롤하면 다음은 데이터 소스는 공통 fetchRequest를 사용하여, coredata에서 데이터를로드하는있는 NSMutableArray이다 [tableView endUpdates];
에 충돌합니다. 현재 상황에서는 fetchedResultsController를 사용할 수 없습니다.
데이터 소스 수는 삽입이 호출되기 전과 후에 정확합니다. 행 수 (및 데이터 소스 수)가 정확합니다.
천천히 스크롤하고 나중에 일부 지점에서 스크롤하면 충돌이 발생합니다. 일반적으로 인덱스와 경계가 경계를 벗어나는 것과 동일한 오류가 발생하지만 오류 메시지의 인덱스와 경계는 테이블 뷰 처음 바인딩되었습니다 (삽입이 발생하기 전에). (4) 즉, 행 카운트 4 & 등
이러한 소스 카운트 오류이다
Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 3 beyond bounds [0 .. 2]'
제가 또한 cellForRowAtIndexPath 방법 중하지만 동일한 결과 행을 삽입 시도.
아이디어가 있으십니까?
더 많은 행을 삽입하는 코드는 코어 데이터에서 일괄 처리를 수행하고 있습니다. 테이블 뷰는 정상적인 동작에 따라 셀을 재사용하므로 메모리의 셀 수가 문제가되어서는 안됩니다. 그러나이 경우에는 nsmutablearray가 이상적이지 않다는 귀하의 권리가 필요합니다. Btw 나는로드되는 행의 수가 한 번에 10 개이고 기존 행의 수가 10임을 언급해야합니다. 어떤 tableview가 쉽게 표시 할 수 있어야합니다. – Rob
tableview 셀은 기본 셀뿐 아니라 셀 텍스트를 행 인덱스로 설정하여 원인을 확인했지만 차이는 없습니다. 계측기에서는 앱이 다운 될 때까지 메모리 또는 프로세서 사용량에 대한 핫스팟을 볼 수 없었습니다. – Rob
다시 이것은 올바른 접근 방식이 아닙니다. 모든 데이터를로드하고 코어 데이터가 배치 크기를 사용하여 데이터의 흐름을 제어하게합니다. 핵심 데이터는 객체 참조를 다시 제공하지만 모든 데이터에로드하지는 않지만 데이터를 캐시하므로 앱 성능이 좋습니다. 이 작업을 시도하기 전에 성능을 ** 테스트 ** 했습니까? 이 * 정말 * 수영 업스트림으로 건너 온다. 나는 tableview/coredata가 문제없이 수천 개의 행을 처리하는 것을 보았습니다. –