Очень индивидуальный заказ с использованием NSSortDescriptor - PullRequest
4 голосов
/ 24 августа 2011

Допустим, у меня есть объекты с разными статусами.Статусы от 0 до 2. Мне нужно отсортировать их с помощью NSSortDescriptor следующим образом:

1

2

0

Есть предложения?

Ответы [ 2 ]

6 голосов
/ 24 августа 2011

Примерно так (не проверено):

descriptor = [[[NSSortDescriptor alloc]
          initWithKey:@"status"
          ascending:YES
          selector:@selector(customStatusCompare:)] autorelease];

@interface NSNumber (CustomStatusCompare)
- (NSComparisonResult)customStatusCompare:(NSNumber*)other;
@end

@implementation NSNumber (CustomStatusCompare)
- (NSComparisonResult)customStatusCompare:(NSNumber*)other {
  NSAssert([other isKindOfClass:[NSNumber class]], @"Must be a number");
  if ([self isEqual:other]) {
    return NSOrderedSame;
  }
  else if (... all your custom comparison logic here ...)
  }
}
2 голосов
/ 24 августа 2011

Используйте пользовательский компаратор или селектор. NSSortDescriptor имеет несколько методов, на которые вам следует взглянуть. Из ссылки на класс NSSortDescriptor :

+ sortDescriptorWithKey:ascending:selector:
– initWithKey:ascending:selector:
+ sortDescriptorWithKey:ascending:comparator:
– initWithKey:ascending:comparator:

Вы, вероятно, столкнетесь с проблемами, если передадите дескрипторы сортировки такого рода в запрос на выборку Core Data.

...