如何在核心数据中检索实体的唯一关系

Posted

技术标签:

【中文标题】如何在核心数据中检索实体的唯一关系【英文标题】:How to retrieve unique relationship of Entities in Core Data 【发布时间】:2012-01-04 22:03:20 【问题描述】:

必须有更简单的方法来做到这一点。我有搜索和搜索,但似乎无法找到我正在寻找的答案。

假设我们有这样的关系 实体A>实体B

如果我创建 2 个 EntityA 实例,每个实例有 3 个 Entity B 实例。

在显示每个 EntityA 的所有 EntityB 的视图控制器中,它显示所有 6 个而不是与之相关的 3 个。

我可以让它正确显示的唯一方法是如果我将指针从一个控制器传递到另一个控制器:

viewController2.entityA = viewController1.entityA;

然后按以下方式检索结果:

    NSMutableArray *result = [[NSMutableArray alloc] initWithArray:[entityA.entityBs allObjects]];

我的印象是,如果您最初获取父实体,则后续获取将基于该父实体,而不是全部返回。

任何帮助将不胜感激。

【问题讨论】:

一般来说,将 entityA 的实例传递给第二个视图控制器,然后使用它的 entityBs 属性来获取值(正如您在代码中所使用的那样)将是解决此问题的最佳方法。 【参考方案1】:

尝试以下方法:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *weightEntity = [NSEntityDescription entityForName:@"EntityB" inManagedObjectContext:[[yourCoreDataManager sharedInstance] managedObjectContext]];
[fetchRequest setEntity:weightEntity];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"EntityA.name LIKE %@", @"EntityAName"]];

NSError *error = nil;
NSArray *result = [[yourCoreDataManager sharedInstance] managedObjectContext] executeFetchRequest:fetchRequest error:&error];

这样,您只请求属于给定实体 A 的那些实体 B。

【讨论】:

这意味着我必须在查询字符串(@"decision.decisionName LIKE %@", @"DecisionX")中明确拼出 EntityAs 属性“name”的值。对吗? 如果你有一个 name 属性,这只是一个例子,你可能会使用一个 id 或其他东西来区分你的 A 实体,但是是的,你可以将该数字/字符串传递给新的视图控制器并这样做。

以上是关于如何在核心数据中检索实体的唯一关系的主要内容,如果未能解决你的问题,请参考以下文章

检索关系核心数据中的值

实体之间的核心数据关系

核心数据简单的一对一关系

核心数据关系

核心数据:如何删除关系中的实体

核心数据 - 具有一对多关系的实体正在检索除“关系”实体之外的所有实体对象的属性