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

时间:2015-06-25 13:59:15

标签: ios swift uitableview core-data nspredicate

我目前没有使用核心数据,但我现在要从Realm切换到它,如果我确定某件事可行,这对我目前的申请方式至关重要作品。我有一个有两个对象的模型:

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

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

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

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

我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

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

  1. 分别提取消息和图片
  2. 将两个数组合并为一个
  3. 对唯一一个数组- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))comparator context:(void *)context
  4. 进行排序

    功能

     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;
        }