如何使用 Core Data 从不相关的实体中获取数据?

Posted

技术标签:

【中文标题】如何使用 Core Data 从不相关的实体中获取数据?【英文标题】:How to get data from unrelated entities using Core Data? 【发布时间】:2014-07-02 06:36:48 【问题描述】:

我有这三个不相关的实体。我怎样才能拿到员工的工资。我想要这样的东西:

Select C.salary FROM Employee A, Department B, Salaries C Where A.id=B.empid AND B.id=C.deptid AND A.id=12

我需要在核心数据中做同样的操作。

【问题讨论】:

Core Data 不是数据库。您应该定义实体之间的关系。那么你的任务就变得微不足道了:salaries = employee.department.salaries; @MartinR 我知道那个家伙,但是问题在于模型的构建方式使得每个实体都不相关并且我没有编辑权限它。所以我需要如何让它工作。而且我也开始知道这是可能的,但不是如何。 【参考方案1】:

正如 Martin 所建议的,简单的方法是设置所需的关系并遍历它们。

但是,如果您没有更改模型的权限,则需要在检索到后在您拥有的内存对象中进行工作和过滤管理。也就是说,您需要将NSFetchRequests 设置为正确的NSPredicates。

例如,检索给定员工的部门。

NSFetchRequest * request = [NSFetchRequest fetchRequestWithEntityName:@"Department"]; 
request.predicate = [NSPredicate predicateWithFormat:@"empid", @(12)];

NSError *error = nil;
NSArray *departments = [moc executeFetchRequest:request error:&error];
if(departments) 
    // do a NSLog for departments here to see what you have
    // here you can access deptid for each department you retrieve
    // and with that value run another request against Salaries
    // e.g. NSManagedObject* department = [departments lastObject];
    //      NSNumber* deptid = [department valueForKey:@"deptid"]   
 else 
    // handle error here


其他部分留作练习 ;)

【讨论】:

谢谢老兄,这就是我现在正在做的事情。出于性能原因,我正在寻找替代方案。难道我们没有任何可以根据需要手动设置和删除关系的编程方法..

以上是关于如何使用 Core Data 从不相关的实体中获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Core Data 中的关系相关实体获取属性?

根据 Swift Core Data 中的关系获取与特定实体相关的所有条目

如何使用 Core Data 中多个实体的属性获取属性值?

如何在 Swift 中使用 UISearchBar 和 NSFetchedResultsController 在 Core Data 上一次获取多个实体?

如何使用 Core Data 关系?

如何获取 Core Data 实体中一行的 ID,以便以后可以引用它?