ios - 使用 NSSortDescriptor、Core Data 和 NSFetchedResultsController 按日期和名称对 UITableView 进行排序

标签 ios core-data uitableview nsfetchedresultscontroller unrecognized-selector

我有一个当前按日期排序的 UITableViewController。我将 Core DataNSFetchedResultsController 一起使用,并且我还想引入按名称进行的进一步排序。

我的模型是:

交易实体 与日期实体的关系 与个人实体的关系

我的fetchedResultsController代码是这样的:

- (NSFetchedResultsController *)fetchedResultsController
{
    NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
    if (_fetchedResultsController != nil)
    {
        return _fetchedResultsController;
    }
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Transaction" inManagedObjectContext:managedObjectContext];
    fetchRequest.entity = entity;
    if ([self.timelineSearchBar.text length] > 0) {
        NSPredicate *predName = [NSPredicate predicateWithFormat:@"whoBy.name CONTAINS[c] %@", self.timelineSearchBar.text];
        NSPredicate *predOccasion = [NSPredicate predicateWithFormat:@"occasion.title CONTAINS[c] %@", self.timelineSearchBar.text];
        NSPredicate *predSubOccasion = [NSPredicate predicateWithFormat:@"subevent.title CONTAINS[c] %@", self.timelineSearchBar.text];
        NSPredicate *compPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[predName, predOccasion, predSubOccasion]];

        [fetchRequest setPredicate:compPredicate];
    }
    NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"dates.dateOfEvent" ascending:NO];


    fetchRequest.sortDescriptors = [NSArray arrayWithObject:sort];
    fetchRequest.fetchBatchSize = 20;
    NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:@"sectionDateFormatter" cacheName:nil];
    self.fetchedResultsController = theFetchedResultsController;
    _fetchedResultsController.delegate = self;
    return _fetchedResultsController;
}

所以 sortDescriptor 现在正在对日期进行排序。 sectionTitles 是从 NSDate 到 NSString 的转换。

我尝试使用以下代码添加另一个 sortDescriptor:

NSSortDescriptor *sortByName = [[NSSortDescriptor alloc] initWithKey:@"whoBy.name" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];

fetchRequest.sortDescriptors = @[[NSArray arrayWithObjects:sort, sortByName, nil]];

应用程序因以下错误而崩溃:

-[__NSArrayI key]: unrecognized selector sent to instance 0x1702237c0
 *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI key]: unrecognized selector sent to instance 0x1702237c0'

我想要实现的是确保按日期排序的条目也按名称排序。

任何指导将不胜感激。

最佳答案

您正在设置排序描述符数组的数组。修复这一行:

fetchRequest.sortDescriptors = @[[NSArray arrayWithObjects:sort, sortByName, nil]];

到:

fetchRequest.sortDescriptors = @[sort, sortByName];

关于ios - 使用 NSSortDescriptor、Core Data 和 NSFetchedResultsController 按日期和名称对 UITableView 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23023848/

相关文章:

ios - 图片网址的数据类型问题

ios - 删除屏幕外的 UITableView 的索引路径 - indexPath.row 大于我的数组的大小

ios - 触摸时取消 UIButton 触摸

iphone - 我的图像和缩略图应该使用 png 还是 jpg?

ios - 如果在未选择 tableView 单元格的情况下按下按钮,则显示警报消息

ios - IF LET 与 GUARD LET 中的返回语句

ios - 如何查询核心数据中按唯一值分组的值?

ios - 从另一个 View 删除 coreData 对象

ios - 在 Xcode swift 中设置单个单元格的高度

ios - 添加了导航栏但没有返回按钮?