2012-01-26 5 views
0

iTunes와 비슷한 방식으로 "트랙"의 CoreData "테이블"에서 결과를 정렬하려고합니다.NSSortDescriptor 알파벳순 정렬

  1. 만족도 (I가 없음을 얻을 수 없다)
  2. 단단한 일 밤
: 문제 "ASC"일종의 내가 끝낼 그래서 정렬 할 첫 번째 문자를 사용한다

"The Stone"이 "I"로 결과에 나타나기를 원합니다. 기본적으로^A-Za-z0-9를 무시합니다. 커스텀 셀렉터와 컴퍼 레이터 블록을 시험해 봤지만 그냥 무시해 버렸습니다.

답변

2

내 경험에 비추어 볼 때 개체 생성시 생성되는 sortName 특성을 사용하는 것이 좋습니다. 그런 다음이 키를 사용하여 CoreData 결과를 훨씬 간단하고 빠른 방식으로 정렬 할 수 있습니다.

1

또 다른 해결책은 결과를 가져 오는 후 수동 정렬하는 것 :

[tracks sortUsingComparator:^NSComparisonResult(id obj1, id obj2) 
{ 
    NSError *error = nil; 
    NSString *pattern = @"[^A-Za-z0-9]"; 
    NSRegularExpression *expr = [NSRegularExpression regularExpressionWithPattern:pattern 
                      options:NSRegularExpressionCaseInsensitive 
                      error:&error]; 

    NSString *title1 = [(Track *)obj1 title]; 
    NSString *title2 = [(Track *)obj2 title]; 

    NSString *title1Match = [expr stringByReplacingMatchesInString:title1 
                  options:0 
                  range:NSMakeRange(0, [title1 length]) 
                 withTemplate:@""]; 
    NSString *title2Match = [expr stringByReplacingMatchesInString:title2 
                  options:0 
                  range:NSMakeRange(0, [title2 length]) 
                 withTemplate:@""]; 

    return [title1Match compare:title2Match options:NSCaseInsensitiveSearch]; 
}]; 

내가 [\ W] 패턴뿐만 아니라 시도했지만 큰 성능 저하가 있었다처럼 보였다.