核心数据 - 可以使用NSSortDescriptor中的块对TableView进行排序吗?

时间:2012-03-20 19:55:20

标签: iphone nsfetchedresultscontroller objective-c-blocks nssortdescriptor

我正在尝试按作者的姓氏对表格进行排序。目前,数据在核心数据中以字符串形式保存为“FirstName LastName。”

我知道核心数据中的自定义选择器超出了Cocoa的范围并返回'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 :(得分:0)

是的,对NSComparator来说,这是正确的,因为排序描述符是在SQL本身编译和执行的,出于性能原因,它并不是真正受支持的。

您可以在Fetch Predicates and Sort Descriptors下点https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Articles/cdPersistentStores.html#//apple_ref/doc/uid/TP40002875-SW11阅读更多内容。