Сортировка NSOrderedSet с использованием NSSortDescriptor - PullRequest
3 голосов
/ 10 февраля 2012

При выполнении этого кода:

NSSortDescriptor *sortDescriptor = [Characteristic sortDescriptor];
[workingSet sortUsingComparator:[sortDescriptor comparator]];

я получаю эту ошибку:

*** -[NSMutableOrderedSet sortUsingComparator:]: comparator cannot be nil

sortDescriptor не ноль, поэтому я понятия не имею, почему это не такработа.

Я могу обойти проблему с кодом ниже, который отлично работает:

NSSortDescriptor *sortDescriptor = [Characteristic sortDescriptor];
NSArray *workingArray = [[workingSet array] sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
workingSet = [NSMutableOrderedSet orderedSetWithArray:workingArray];

1 Ответ

8 голосов
/ 10 февраля 2012

Проверьте ссылку NSArray на разницу между двумя методами

Типичное использование первого метода будет примерно таким:

NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {

    if ([obj1 integerValue] > [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedDescending;
    }

    if ([obj1 integerValue] < [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedAscending;
    }
    return (NSComparisonResult)NSOrderedSame;
}];

(Примерот Apple )

Где в качестве второго метода будет больше похоже:

NSSortDescriptor *nameSort = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:nameSort];

NSArray *sortedArray = [array sortedArrayUsingDescriptors:sortDescriptors];
...