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

Posted

技术标签:

【中文标题】核心数据 - 可以使用 NSSortDescriptor 中的块对 TableView 进行排序吗?【英文标题】:Core Data - Possible to sort TableView using blocks in NSSortDescriptor? 【发布时间】:2012-03-20 19:55:20 【问题描述】:

我正在尝试按作者的姓氏对表格进行排序。目前,数据在核心数据中以字符串形式保存为“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】:

是的,NSComparator 也是如此,因为出于性能原因,排序描述符是在 SQL 本身中编译和执行的,因此它并不真正受支持。

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

【讨论】:

以上是关于核心数据 - 可以使用 NSSortDescriptor 中的块对 TableView 进行排序吗?的主要内容,如果未能解决你的问题,请参考以下文章

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

核心数据:是不是可以在 group by 中使用自定义功能

核心数据。是不是可以像使用普通 SQL 一样创建视图

可以使用 NSFileManager 处理从 UIManagedDocument 创建的核心数据数据库吗?

StackMob 本地核心数据存储

使用 iCloud 进行核心数据同步