2011-10-05 7 views
0

첫 번째 앱으로 간단한 탐색 기반 numismatic 컬렉션 앱을 마스터하려고합니다.UITableView + .plist + UINavigationController issue

.plist로 채워지는 배열의 인덱스에 문제가 있습니다. Plist에는 191 개의 레코드가 있습니다. 일반 국가 목록 -> 항목 0 - 문자열 - 알바니아 ... 항목 190 - 문자열 - 바누아투.

이 레코드를 임시 배열로 읽어서 UITableView를 채 웁니다.

NSString *countriesFile=[[NSBundle mainBundle]pathForResource:@"countries" ofType:@"plist"]; 
countries=[[NSArray alloc]initWithContentsOfFile:countriesFile]; 

이 테이블보기에는 대륙이 있습니다.

RootViewController of my app

글쎄, 내 문제는 다음과 같습니다

다른 펜촉에 밀어, 그것은 국가의 이름을 읽고 헤더와 라벨에 표시되어야합니다. 그렇지만 그것은 유럽 국가들에게만 해당됩니다. 다른 대륙의 국가를 가볍게 치면 유럽 국가를 볼 수 있습니다. 스크린 샷을 참조하십시오.

유럽 국가에서 벨소리 -> 벨기에, 오른쪽 그림.

enter image description here

아프리카 섹션으로 이동 :

enter image description here

앙골라에 테이핑과 오스트리아를 받고.

enter image description here

그래서, 앙골라의 인덱스 - (92) 오스트리아 - 1. 그러나 오스트리아와 앙골라는 그 나라의 섹션에서 두 번째 셀입니다.

어디서 문제가 있으며 무엇이 될까요?

미리 감사드립니다.

답변

0

-(void)tableView: (UITableView*)tableView didSelectRowAtIndexPath: (NSIndexPath*)indexPath을 사용하여 목록의 항목을 클릭 한 시간을 알리는 것으로 가정합니다. 또한 입력 한 행의 색인을 알아 내기 위해 [indexPath row] (또는 indexPath.row)을 사용하고 있습니까?

row 속성이 반환하는 내용은 현재 섹션 내의 행 인덱스입니다. 전체 테이블에 대한 절대 행 인덱스를 리턴하지 않습니다. 이 때문에 첫 번째 섹션의 인덱스 2 항목이나 두 번째 섹션의 인덱스 2 항목을 클릭하면 row이 두 경우 모두 2를 반환해도 상관 없습니다.

아이디어는 .plist 파일을 조금 변경하는 것입니다. 하나의 긴 배열을 가진 국가 대신에 대륙을 나타내는 부모 배열이 있어야합니다. 그런 다음이 대륙 배열의 각 색인에 대한 객체에는 거기에있는 국가 목록을 보유 할 다른 배열이 있습니다.

-(void)tableView: (UITableView*)tableView didSelectRowAtIndexPath: (NSIndexPath*)indexPath 
{ 
    NSUInteger section=[indexPath section]; 
    NSUInteger row=[indexPath row]; 
    NSString* countryName=[[plistArray objectAtIndex: section] objectAtIndex: row]; 
    //rest of code... 
} 
+0

.plist를 바꾸려면 무엇을 의미합니까? 방법? 배열 -> 컬렉션? – NCFUSN

+0

그럼 내 방법은 다음과 같습니다 : - (void) tableView : (UITableView *) tableView didSelectRowAtIndexPath : (NSIndexPath *) indexPath { NSUInteger section = [indexPath section]; NSUInteger row = [인덱스 경로 행]; NSString * countryName = [[countries objectsAtIndex : section] objectAtIndex : row]; SelectedCountry * selectedCountry = [[SelectedCountry alloc] initWithNibName : @ "SelectedCountry"번들 : nil]; selectedCountry.selectedCountry = [countryName objectAtIndex : indexPath.row]; [self.navigationController pushViewController : selectedCountry animated : YES]; [selectedCountry release]; } – NCFUSN

+0

이제 'NSString이'objectAtIndex '에 응답하지 않을 수 있습니다. var 유형을 변경해야합니까? 무엇을? – NCFUSN

0

indexPath의 섹션 값을 고려하지 않은 것처럼 들립니다. indexPath는 섹션과 행의 두 부분으로 구성됩니다. 단일 섹션이있는 테이블에서는 일반적으로 행 값을 읽습니다. 귀하의 경우에는 그룹화 된 테이블이있는 것처럼 보이므로 데이터 위치에 대해 indexPath.srow와 indexPath.row를 모두 읽어야합니다.

+0

명확한 예를 들어주세요. – NCFUSN

+0

각 대륙은 섹션입니다. 그래서 섹션 0 유럽입니다. UITable 문서를보십시오. – Dancreek