2009-08-10 2 views
1

일반 테이블 뷰를 단면 테이블 뷰로 변환하려고합니다. 섹션 제목을 해당 섹션의 항목에 대한 첫 번째 문자로 사용하고 싶습니다.다른 배열의 모든 개체의 첫 글자를 가진 배열을 반환하는 방법은 무엇입니까?

NSSortDescriptor *sortDescriptor; 
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"Name" 
               ascending:YES] autorelease]; 
NSArray *sortedArray; 
NSMutableArray *commonNameArray = [tableDataSource valueForKey:@"Name"]; 

NSArray *uniquearray; 
uniquearray = [[NSSet setWithArray:commonNameArray] allObjects]; 
sortedArray = [uniquearray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 

이 코드는 중복 된 제목을 제거하고 알파벳 순으로 목록을 정렬 :

이것은 내가 지금까지 내 titleForHeaderInSection 방법에있는 것입니다. 이제 배열의 문자열을 첫 번째 문자로 변환하면됩니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

답변

7
NSMutableSet *firstCharacters = [NSMutableSet setWithCapacity:0]; 
for(NSString *string in [tableDataSource valueForKey:@"Name"]) 
    [firstCharacters addObject:[string substringToIndex:1]]; 

NSArray *uniquearray = [[firstCharacters allObjects] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 
+0

고마워요! 이것은 내가 아래에서 생각해 낸 해결책보다 조금 더 우아합니다. 방금 추가했습니다 : \t return [uniquearray objectAtIndex : section]; 그것은 매력처럼 작동합니다. – Jonah

+0

우아 할뿐만 아니라 훨씬 더 효율적입니다 ... titleForHeaderInSection에서 this를 수행하면 안됩니다. uniqueArray를 멤버 변수로 유지하고 dealloc에서 릴리스해야합니다. 당신은 정렬 된 모든 이름의 배열을 만들고, 하나의 요소를 선택하고 첫 번째 문자를 얻습니다. 광산은 첫 번째 문자 집합을 만든 다음 정렬 된 버전을 만듭니다. 두 문자 모두 CommonName의 모든 구성원에서 # 문자 대신 36 자 길이를 사용합니다. – groundhog

+0

제안 해 주셔서 감사합니다. 이제 viewDidLoad 메서드에서 고유 한 선언을 배치 한 다음 호출합니다. \t return [arrayOfInitialLetters objectAtIndex : section]; titleForHeaderInSection 메서드의 – Jonah

0

감사합니다. 영감의 희귀 한 순간에 나는 단지 그것을 작동 시켰습니다. 여기 내가 한 일이있다. 누구든지 이런 식으로 잘못 본 것이 있습니까?

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { 
    NSSortDescriptor *sortDescriptor; 
    sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"CommonName" 
       ascending:YES] autorelease]; 
    NSArray *sortedArray; 
    NSMutableArray *commonNameArray = [tableDataSource valueForKey:@"CommonName"]; 

    NSArray *uniquearray; 
    uniquearray = [[NSSet setWithArray:commonNameArray] allObjects]; 
    sortedArray = [uniquearray sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; 

    NSString *stringForFirstLetter = [[sortedArray objectAtIndex:section] substringToIndex:1]; 

return stringForFirstLetter;} 
관련 문제