2012-01-27 2 views
2

NSFetchRequest은 코어 데이터에서 객체를 가져 와서 간단한 NSSortDescriptor을 사용하여 객체를 정렬합니다. 내가 아이 패드 실행 iOS4에 정확히 같은 코드를 테스트하지만 때, iOS5를 5.1에서 예상대로NSSortDescriptor - 주문이 변경 되었습니까?

NSMutableArray *sortDescriptors = [NSMutableArray array]; 
    NSSortDescriptor *sortDescriptor1 = [NSSortDescriptor sortDescriptorWithKey:@"ownerName" ascending:YES selector:@selector(caseInsensitiveCompare:)]; 
    NSSortDescriptor *sortDescriptor2 = [NSSortDescriptor sortDescriptorWithKey:@"petName" ascending:YES selector:@selector(caseInsensitiveCompare:)]; 
    [sortDescriptors addObject:sortDescriptor1]; 
    [sortDescriptors addObject:sortDescriptor2]; 
    [fetchRequest setSortDescriptors:sortDescriptors]; 

모든 작품 : 나는 사용자가 선택하는 내용에 따라 다른 사람의 몇 가지를 사용하지만, 그들은이 같다. 2.1 (또는 4.3 시뮬레이터) 모든 첫 번째 정렬 설명 자의 순서가 반대로됩니다. 이 예에서 소유자 이름은 Z에서 A로 정렬되지만 애완 동물은 A에서 Z로 올바르게 정렬됩니다!

이전 iOS 버전에 ascending 부울이 잘못된 방법으로 인한 버그가 있었습니까? 또는, 제가 잘못하고있는 다른 것이 있습니까?

EDIT : 첫 번째 키 (ownerName)는 NSFetchedResultsController 섹션으로 사용됩니다. 관련성이 있는지 확실하지 않습니다.

감사 Craig

+0

'ascending'매개 변수에 'NO'를 전달하면 올바른 순서를 얻으실 수 있습니까? – Mundi

+0

예. 첫 번째 SD의 '오름차순'문자를 NO로 변경 한 다음 iOS5 결과를 반영합니다. 두 번째 SD는 여전히 YES로 설정되었고 섹션 내의 항목은 같은 순서로 정렬되었습니다. 기묘한! –

답변

0

그냥 추측.

caseInsensitiveCompare:을 지정하지 않고 좋은 결과를 얻었습니다.

또한 NSFetchRequest은 인수로 이 아닌 NSArray을 나타냅니다. 애플의 샘플 코드의 모든 그것은 일반적으로 (대신 불변의 가변 사용) 같은

[fetchRequest setSortDescriptors: 
    [NSArray arrayWithObjects:sortDescriptor1, sortDescriptor2, nil]]; 

내가 있었다 오류 같은 것입니다,하지만 종종 그것은 또한 단지 작동합니다. 어쩌면 그것을 변화시키는 것은 가치가 있습니다.

+0

감사! 나는'caseInsensitiveCompare'를 제거하려고 시도했지만 다른 것은 없다. mutable 배열을 배열로 변경해 보겠습니다. 내일 어떤 차이가 있는지 확인해 보겠습니다. –

+0

이것은 차이가 없다는 것을 확인할 수 있습니다 : ( –

+0

NSMutableArray 대 NSArray와 관련하여 NSMutableArray는 NSArray의 하위 클래스이므로 전달할 때 자동으로 캐스팅됩니다. 모든 문제. 정상적인 OO 시스템에서는 모든 하위 클래스가 수퍼 클래스에 있어야합니다. –