2011-01-10 1 views
0

EDIT : "sortedArrayUsingSelector"와 함께 맞춤식 선택기를 사용할 수 있습니까? [[ComicArray valueForKey : @ "Name"] sortedArrayUsingSelector : @selector (caseInsensitiveCompare :)];를 사용하여 작업 할 수 있습니다.NSArray sortedArrayUsingSelector가 SIGBART에서 오류를 계속 발생합니다

예외 "선택자를 인식하지 못합니다"가 발생합니다. 누구든지 이것을 정렬하는 방법을 알고 있습니까? ComicArray는 .Name을 포함하는 사용자 지정 클래스 인 ComicDB로 채워집니다. ComicDB.Name을 기준으로 정렬하려고합니다.

//atempt1 
NSArray * comicArray2 = [[ComicArray valueForKeyPath:@"ComicDB.Name"] sortedArrayUsingSelector:@selector(compareByName:)]; 

//atempt2  
NSArray * compicArray2 = [ComicArray sortedArrayUsingSelector:@selector(compareByName:)]; 

- (NSComparisonResult)compareByName:(id)other 
{ 
    return [[self valueForKeyPath: @"ComicDB.Name"] caseInsensitiveCompare:[other valueForKeyPath: @"ComicDB.Name"]]; 
} 

감사 - 마이크

답변

1

1 월 23 2011 이 기능을 사용할 수 없습니다. 대신 iOS 4.0 정렬 방법을 사용했습니다.

NSArray * myArraySorted = [ComicArray sortedArrayUsingComparator:^(id obj1, id obj2) 
          { 
           return [[obj1 valueForKey:@"Name"] caseInsensitiveCompare: [obj2 valueForKey: @"Name"]]; 
           // return [[obj1 Name] caseInsensitiveCompare: [obj2 Name]]; 
          }]; 
3

sortedArrayUsingSelector은 그들의 순서를 결정하기 위해 배열 오브젝트의 선택을 행한다. compareByName : 메소드는 ComicDB 클래스에 있어야합니다. 접근자를 정의한 경우 다음 구현이 작동합니다. 그렇지 않은 경우 NamevalueForKey:@"Name"으로 변경하십시오.

- (NSComparisonResult)compareByName:(ComicDB *)other { 
    return [[self name] caseInsensitiveCompare:[other name]]; 
} 
+0

안녕하십니까. 나는 마을을 벗어났다. 나는 아직도 SIGBART - [NSObject (NSObject) doesNotRecognizeSelector :]를 얻고있다. 디버깅 할 때, 나는 심지어 "compareByName"에 들어 가지 않습니다. – Mausimo

+0

배열의 객체가 ComicDB 객체입니까? 콘솔에는 오류를 던진 객체의 클래스 이름이 있어야합니다. 이것은 compareByName :을 호출하는 것입니다. – ughoavgfhw

+0

ComicArray의 개체는 ComicDB *이고 ComicDB *는 NSManagedObjects라고 대답했습니다. – Mausimo