是否可以使用MagicalRecord / Core Data进行UNION查询

时间:2014-09-23 18:06:46

标签: ios core-data union magicalrecord

我有两个实体EventAction都继承自Message。我已经读过,不使用单表继承的性能会更好。应用程序将事件和操作用作按日期排序的消息数组。目前,我只是单独选择事件和操作,然后合并/排序新数组。

    NSArray *events = [STEvent MR_findAll];
    NSArray *actions = [STAction MR_findAll];
    NSMutableArray *messages = [[NSMutableArray alloc] initWithArray:events];
    [messages addObjectsFromArray:actions];
    NSArray *messagesSorted;
    messagesSorted = [messages sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
        NSDate *first = [(STMessage*)a date];
        NSDate *second = [(STMessage*)b date];
        return [first compare:second];
    }];

是否可以使用Magical Record或Core Data进行SQL UNION查询,以便一次检索所有内容?

2 个答案:

答案 0 :(得分:0)

是否可以使用Magical Record或Core Data进行SQL UNION查询,以便一次检索所有内容?

没有。核心数据是一个对象图管理框架。它可能有也可能没有与之关联的存储,持久性存储是抽象对象图存储。即使该商店的具体实现使用SQL或SQLite,您也无法将SQL发送到商店。

那就是说,给定你的对象模型,得到"一切"你会获取所有Messages。使用一个匹配所需内容的谓词(或一个nil谓词),并使用Messages实体作为获取请求的目标。您的提取将返回从Message下降的所有实体。

答案 1 :(得分:0)

从概念上讲,我认为您希望在单个查询中获取Message的所有子类。像这样考虑它会给你一个如何在代码中执行此操作的线索:

NSFetchRequest *request = [Message MR_requestAll];
request.includesSubentities = YES;
NSArray *eventsAndActions = [Message MR_executeFetchRequest:request];
//...continue on

此查询将包含MessageEventAction的所有实例。