사용자 지정 사전 순으로 NSArray를 정렬하려고합니다. 그 거래는 객체의 상태를 포함하는 문자열을 가진 Array를 가졌다는 것입니다.NSSortDescriptor 사용자 지정 영숫자 순서
사용 가능한 상태는 entered, process, ready, done
입니다.
정상적으로 (알파벳 순서로) 정렬 할 때 순서가 잘못되었습니다 (완료, 입력, 처리, 준비).
나는 그것을 올바른 방법으로 주문하려면 다음 코드를 시도 :NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"state" ascending:YES comparator:^(id obj1, id obj2) {
if ([obj1 isEqualToString:@"entered"] && [obj2 isEqualToString:@"process"]) {
return (NSComparisonResult) NSOrderedAscending;
}
else if ([obj1 isEqualToString:@"process"] && [obj2 isEqualToString:@"entered"]) {
return (NSComparisonResult) NSOrderedDescending;
}
else if ([obj1 isEqualToString:@"process"] && [obj2 isEqualToString:@"ready"]) {
return (NSComparisonResult) NSOrderedAscending;
}
else if ([obj1 isEqualToString:@"ready"] && [obj2 isEqualToString:@"process"]) {
return (NSComparisonResult) NSOrderedDescending;
}
else if ([obj1 isEqualToString:@"ready"] && [obj2 isEqualToString:@"done"]) {
return (NSComparisonResult) NSOrderedAscending;
}
else if ([obj1 isEqualToString:@"done"] && [obj2 isEqualToString:@"ready"]) {
return (NSComparisonResult) NSOrderedDescending;
}
else {
return (NSComparisonResult) NSOrderedSame;
}
}];
내가 또한 단어의 바로 첫 글자를 사용하여 시도,하지만 너무 작동하지 않았다.
이 비교기를 사용할 때 resp를 주문하지 않습니다. 배열은 "오래된"순서를 유지합니다.
내가 뭘 잘못 먹었 니? Comparator를 올바르게 이해하지 못했습니까? 도움을
감사합니다, 안부, 줄리안
안녕하세요. Mundi! 위대한 접근, 감사합니다! 하지만 지금 : NSString (상태 이름 포함)을 _state_ 유형의 객체로 변환하려면 어떻게해야합니까? 내 응용 프로그램이 웹 기반 응용 프로그램의 "그냥"iOS 래퍼이기 때문에 데이터베이스에서 표현을 변경할 수 없습니다. ** 고마워요 **! –
다른 JSON 또는 XML "필드"와 같은 방식입니다. 사용자 객체의 속성과 하나씩 일치시킵니다. 이 경우에는 아마도 if 문의 문자열을 사용해야합니다. – Mundi