我有两个实体Event
和Action
都继承自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查询,以便一次检索所有内容?
答案 0 :(得分:0)
没有。核心数据是一个对象图管理框架。它可能有也可能没有与之关联的存储,持久性存储是抽象对象图存储。即使该商店的具体实现使用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
此查询将包含Message
,Event
和Action
的所有实例。