Основные данные - можно отсортировать TableView, используя блоки в NSSortDescriptor? - PullRequest
1 голос
/ 20 марта 2012

Я пытаюсь отсортировать таблицу по фамилии автора. В настоящее время данные сохраняются в виде строки в основных данных как «FirstName LastName».

Я понимаю, что пользовательские селекторы в основных данных выходят за рамки Какао и возвращают 'NSInvalidArgumentException', reason: 'unsupported NSSortDescriptor selector: compareToLastName:' Верно ли это и для использования компаратора?

Вот то, над чем я работаю, похоже, полностью игнорирует компаратор.

// Sort the request
NSSortDescriptor *sortByType;
if ([sort isEqualToString:@"author"]) {
    NSComparator comparisonBlock = ^(id obj1,id obj2) {
        NSString *obj1B = [[(NSString *)obj1 componentsSeparatedByString:@" "] lastObject];
        NSString *obj2B = [[(NSString *)obj2 componentsSeparatedByString:@" "] lastObject];
        return (NSComparisonResult) [obj1B compare: obj2B];
    };
    sortByType = [[NSSortDescriptor alloc] initWithKey:sort ascending:YES comparator:comparisonBlock];
}
else {
    sortByType = [[NSSortDescriptor alloc] initWithKey:sort ascending:YES];
}

NSSortDescriptor *secondSort = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects:sortByType, secondSort, nil];
[fetchRequest setSortDescriptors:sortDescriptors];

Спасибо!

1 Ответ

0 голосов
/ 01 января 2014

Да, это верно даже для NSComparator, поскольку дескрипторы сортировки компилируются и выполняются в самом SQL по соображениям производительности, которые на самом деле не поддерживаются.

Вы можете прочитать больше здесь https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Articles/cdPersistentStores.html#//apple_ref/doc/uid/TP40002875-SW11 в разделе Fetch Predicates and Sort Descriptors.

...