2011-02-17 5 views
0

Xcode 3.2.5 iOS 4.2를 설치 한 후 완벽하게 작동하는 앱이 작동을 멈췄습니다. 나는 이것이 다른 사람들에게 일어 났지만 어쩔 수 없다는 것을 보았다.iOS 4.2로 업그레이드 한 후 아이폰 앱이 실행되지 않습니다.

내 질문 : 1. 어디에서 충돌이 발생했는지 어떻게 알 수 있습니까? 2. 문제를 더 잘 찾아 내고 정확히 지적하려면 어떻게해야합니까?

다음은 호출 스택입니다. 답에 대한

Call Stack

토미 감사합니다. 빌드하고 실행하고 제안했지만 충돌이 발생하면 충돌이 발생한 위치를 표시하지 않습니다. 또한 메서드 내에서 중단 점을 추가했지만 멈추지 않습니다. 더 이상의 아이디어? 다음은 코드 스 니펫입니다.

: 나는 문제의 원인이 동일한 subCategoryView 여기라고 생각

enter image description here

:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
ApplicationData *appdata = [ApplicationData sharedInstance]; 
if(appdata.currentCategoryIndex >= 0) { 
    Category *category = [appdata.categoryList objectAtIndex:appdata.currentCategoryIndex]; 
    if(category.records) { 
     [lab_norecords setHidden:YES]; 
    } else { 
     [lab_norecords setHidden:NO]; 
     return 0; 
    } 
    return [category.records count]; 
} 
return 0; 

}

enter image description here

지금이 오류를 얻고있다

- (id)init { 
if([[NSBundle mainBundle] loadNibNamed:@"SubCategoryView" owner:self options:nil]) { 
    //if(self = [super initWit]) 
    cellowner = [[TableCellOwner alloc] init]; 
    [listTableView setBackgroundColor:[UIColor clearColor]]; 
    [listTableView setSeparatorColor:[UIColor whiteColor]]; 
    [listTableView initialize]; 
} 
return self; 

}

답변

3

두 번째 열을 확인하십시오. 애플리케이션에서 가장 최근의 일은 네 번째 행 ('3'번호가 매겨진)의 SubCategoryView numberOfSectionsInTableView :에 대한 호출입니다. 트리거 된 예외는 22 개의 객체가있는 배열에서 객체 4294967295를 검색하려고 시도한 NSRangeException입니다. 어딘가 SubCategoryView의 numberOfSectionsInTableView 내

NSInteger variable = -1; 
[array objectAtIndex:variable]; 

: 4294967295는 부호없는 숫자에 서명 한 32 비트 번호를 캐스팅하는 경우 -1이 어떤 이유로 당신이 뭔가를하고있는, 그래서 모습입니다. 최상의 즉각적인 추측 : 4.1과 4.2 사이의 일부 변경으로 인해 테이블을 채우는 데 사용하는 모든 방법이 잘못된 결과를 초래하게됩니다.

여기서부터 진행하려면 디버그 빌드를하고 명령 + y를 사용하여 실행해야합니다 (또는 빌드, 빌드 및 실행 - 중단 점 켜짐으로 이동). 프로그램이 이번 크래시 될 때 디버깅 창이 나타나야합니다. 프로그램이 예외를 던지는 라인을 정확히 보여주고 그 시점에서 모든 프로그램 변수의 상태를 검사 할 수있게 해줍니다. 디버거는 중단 점을 배치하고, 한 번에 한 줄씩 프로그램을 단계적으로 진행할 수있게합니다.

+0

@ 토미 내 게시물을 편집했습니다. 더 도움이 될 수 있는지 살펴볼 수 있습니까? 나는 붙어있다. – ldj

+0

나는 그것과 함께 잘못된 것을 볼 수 없다; 다음 단계는 메소드의 시작과 단계별로 중단 점을 설정하는 것입니다. Xcode에서 소스 코드 편집기보기의 왼쪽 여백을 클릭하여 중단 점을 설정할 수 있습니다. 명령 + y가 실행 된 후 프로그램이 충돌했을 때 Xcode가 수행해야했던 작업은 왼쪽 상단의 창에 현재 스택 추적이있는 디버거보기를 표시하는 것이 었습니다. 코드에있는 첫 번째 항목을 찾아 클릭하여 코드의 줄을 봅니다. 그런 다음 오른쪽 상단의 영역을 사용하여 상태를 검사합니다. – Tommy

+0

@ 토미. 메서드의 시작 부분에 중단 점을 설정했지만 멈추지는 않습니다. 전에 충돌합니다. 내가 한 것은 디버거에서 빌드하고 실행하는 것입니다. 이미지를 참조하십시오. – ldj

관련 문제