从同一个核心数据数据库中获取多个不同的实体

Posted

技术标签:

【中文标题】从同一个核心数据数据库中获取多个不同的实体【英文标题】:Fetching Multiple Different Entities from the same Core Data Database 【发布时间】:2013-12-02 20:36:53 【问题描述】:

我正在实现一个应用程序,其中有一堆不同的实体,这些实体是从所有这些实体共有的基本模型继承而来的。目前假设我有 EntityParent 是我的基类,并且我有大约 5 个不同的实体继承了基类。假设我分别有 EntityA、EntityB、EntityC、EntityD 和 EntityE,目前我正在从数据库中获取 EntityA,我还想获取其他实体,如下所示:

NSManagedObjectContext *context = _managedObjectContext;

NSFetchRequest * fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription* entityDiscA = [NSEntityDescription entityForName:@"EntityA" inManagedObjectContext:context];
[fetchRequest setEntity:entityDiscA];

NSError* error;

NSArray *fetchedAs = [context executeFetchRequest:fetchRequest error:&error];


NSFetchRequest * fetchRequestB = [[NSFetchRequest alloc] init];
NSEntityDescription* entityDiscB = [NSEntityDescription entityForName:@"EntityB" inManagedObjectContext:context];
[fetchRequestB setEntity:entityDiscB];

NSError* error;

NSArray *fetchedBs = [context executeFetchRequest:fetchRequestB error:&error];

但我也想获取 EntityB 和 EntityC 等等,但是当我尝试获取我的应用程序时崩溃了。如果您查看上面的代码,当我尝试获取 EntityB 时,我会收到 SigAbort 并崩溃。上面的代码 sn-p 有什么问题?我们是否不允许使用 Core Data 获取多个不同的实体?我唯一的选择是仅根据父类获取所有对象,然后使用类名进行过滤吗?我宁愿不这样做,但如果那是唯一的出路,我想我将不得不接受并使用它。不胜感激任何建议或提示(我确实阅读了该人建议将父类声明为抽象实体并使用它进行提取的帖子之一)

谢谢, 拉詹

【问题讨论】:

你必须告诉我们错误是什么,否则没有办法知道什么不工作。 当我执行第二个 fetch 语句时,我得到了 Sig Abort。 刚刚编辑了更多信息:) error 对象说什么? 发现了我的问题。我试图获取的实体名称有错字。一旦我纠正它就可以正常工作。 【参考方案1】:

只需一个一个地获取所有实体。你可以简单地循环。

NSMutableArray *allOfThem = [NSMutableArray array];
for (NSString *entitySuffix in @[@"A", @"B", @"C", @"D", @"E"]) 
   NSString *entity = [NSString stringWithFormat:@"%@%@", @"Entity", entitySuffix];
   NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:entity];
   [allOfThem addObjectsFromArray:
      [context executeFetchRequest:request error:nil]];

在创建获取请求之前确保所有实体名称都正确。

【讨论】:

虽然这不是我想要的,但经过仔细检查后,我发现实体名称中有一个错字,并且我的原始代码在修复错字后可以正常工作。感谢您的建议。

以上是关于从同一个核心数据数据库中获取多个不同的实体的主要内容,如果未能解决你的问题,请参考以下文章

从众多实体中恢复一个获取的实体——核心数据

保存到多个实体中 - 核心数据 - Swift

如何从核心数据中获取父实体的所有子实体,以及如何将父数据用作 UITableview

从核心数据中获取不同的数据以及降序?

核心数据获取请求不返回不同的结果

核心数据:获取关系属性