核心数据中的谓词和组合过滤器?

Posted

技术标签:

【中文标题】核心数据中的谓词和组合过滤器?【英文标题】:Predicates and combined filters in core data? 【发布时间】:2015-06-25 13:59:15 【问题描述】:

我目前没有使用 Core Data,但我即将从 Realm 切换到它,如果我确定某件事会起作用,这对我的应用程序当前的工作方式至关重要。我有一个包含两个对象的模型:

Message:
date - NSDate
text - String
images - One-to-many > Image

Image:
imageURL - String
message - Many-to-one > Image

我有一个同时显示图像和消息的表格视图。当 UITableView 想知道时,我需要知道在某个索引路径上应该做什么。所以我需要能够执行类似于以下的查询:

“给我一个有序的图像和消息列表,消息按date排序,图像按message.date排序”。

我该怎么做?

【问题讨论】:

你的tableView会被分组吗?如果是这样,部分名称是什么? 【参考方案1】:

据我所知,您无法在 coredata 获取请求期间对包含消息和图像的混合数组进行排序。这是一种可能的方法:

    分别获取消息和图像 将两个数组合并为一个 排序唯一的一个数组- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))comparator context:(void *)context

功能

 NSInteger sort(id item1, id item2, void *context) 
        int v1 = [item1 iskindofClass[message class]]?item1.data:item1.message.date;
        int v2 = [item2 iskindofClass[message class]]?item1.data:item1.message.date;
        if (v1 < v2)
            return NSOrderedAscending;
        else if (v1 > v2)
            return NSOrderedDescending;
        else
            return NSOrderedSame;
    

【讨论】:

如果我有一个包含 10000 个项目的数组,那会不会很慢? @Andrew 我不确定。最好进行一些测试以找出答案

以上是关于核心数据中的谓词和组合过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

Xcode:使用复杂谓词过滤核心数据集

核心数据谓词根据日期属性过滤对象

如何快速为 NSDate 做核心数据获取谓词?我想按月过滤

使用谓词对核心数据进行排序以消除重复

核心数据:在一对多关系中匹配多个项目的组合

Entity Framework LINQ 复杂查询 - 组合多个谓词