2013-09-24 4 views
2

아래 업데이트를 참조하십시오.AppList 데이터 소스가있는 [NSIndexPath row]의 어설 션 오류

저는 비틀 거리고 AppList를 사용하고 있습니다. 나는 스포트라이트에 연결하고 설치된 모든 응용 프로그램에서 테이블을 만드는 중입니다. dataSource를 사용하여 정보 (디스플레이 식별자 등)를 얻으려고합니다. 은 dataSource가 정의되어 있지 않은 나는 가짜 데이터 (테스트 이름)를 사용하는 경우

SpringBoard[1622] <Warning>: *** Assertion failure in -[NSIndexPath row], /SourceCache/UIKit/UIKit-2380.17/UITableViewSupport.m:2680 SpringBoard[1622] <Warning>: ***** AltKeyboard Uncaught Exception: Invalid index path for use with UITableView. Index paths passed to table view must contain exactly two indices specifying the section and row. Please use the category on NSIndexPath in UITableView.h if possible. *****
또는
SpringBoard[1890] <Warning>: ***** AltKeyboard Uncaught Exception: *** -[__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1] ***** SpringBoard[1890] <Error>: *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 2 beyond bounds [0 .. 1]' *** First throw call stack:

이 테이블이 생성됩니다은 dataSource가 정의되어있는 경우 문제는 ... 나는 다음과 같은 오류가 발생한다 벌금. dataSource를 인쇄 할 때 두 개의 항목 만 있습니다.

IRC의 Ryan Petrich는 내가 모든 것을 완전히 잘못하고 있지만 그 이후에는 별 도움이되지 않는다고 생각하는 것처럼 보였습니다. 아마도이 문제를 잘못 풀어 볼 것입니까?

코드 : http://pastebin.ca/2457626
저장소 : https://github.com/twodayslate/ListLauncher

편집/업데이트! dataSource가 나에게 문제를주고있다. 동일한 수의 앱을 가져 오지 않아 색인 오류 등이 발생합니다. 나는 200 개 이상의 애플 리케이션을 가지고 있지만 데이터 소스는 단지 다음 코드는 오류를 부여하지 않습니다하지만이 개 항목이 표시됩니다 2.
를 가져 오는됩니다 : http://pastebin.ca/2458961

편집! ALApplicationList를 사용하도록 변경했습니다. 나열된 모든 응용 프로그램을 가져올 수 있습니다. 그러나 테이블을 스크롤하려고하면 충돌이 발생합니다. 목록을 정렬하고 작성하는 것이 너무 느려서 문제가 발생할 수 있다고 생각합니다. 저는 obj-c에서 프로가 아니므로 제가하고있는 것보다 더 나은 방법이 있다고 확신합니다. http://pastebin.ca/2459318

+1

가능한 복제본 [deleteRowsAtIndexPaths를 작동시키지 못함] (http://stackoverflow.com/questions/8774091/cannot-get-deleterowsatindexpaths-to-work). 거기에 대한 대답은 예외의 근본 원인이 동일하기 때문에이 질문에 적용됩니다. – CodaFi

+0

NSIndexPath를 만들지 않으므로 위의 해결 방법과 다릅니다. – twodayslate

+1

그렇게 확신하지 마십시오. pastebin 링크의 164 번 줄이 저에게 의심스러워 보입니다. – CodaFi

답변

4

귀하의 문제는 두 가지이다 : 여기

성공적으로 모든 응용 프로그램을 나열하는 작업 코드입니다. 첫째, UITableView은 행과 섹션을 모두 포함하는 수작업 인덱스 경로가 필요합니다. 여기에는 행만 제공됩니다. 둘째, 검사되지 않은 배열 액세스가 100 % 성공할 것으로 기대할 수는 없으므로 경계는 사용중인 모든 액세스 호출을 확인합니다. 또한 참조를 유지할 필요가 없다면 코드에 포함 된 iVar 할당에서 일부 유지를 사용하는 것이 좋을 것입니다 (하지만 그렇게하는 것처럼 보입니다).

0

나는 ALDataSource에 대한 대안을 찾았습니다. ALApplicationList.applications를 정렬했습니다. 문제는 정렬 된 NSArray의 인스턴스가 계속 사라지는 것이 었습니다. 그래서 저는 [가치를 유지했습니다] 모든 것이 효과가있었습니다! 정렬 된 값을 다시 초기화하면 속도가 너무 느려지고 장치가 손상됩니다. http://pastebin.ca/2459778