我对核心数据感到陌生,并寻找可能是一个简单问题的指导:
我有一组实体,每个实体可能属于某个集合,也可能不属于某个集合。我希望能够以最有效的方式检索属于该集合的那些。我该如何设置?
让我们更具体一点。假装有争议的实体是一个人。我的数据存储中有许多不同的Person实体。其中一些人为Apple工作。我经常只想检索那些为Apple工作的人。我该如何设置?
基于我对Core Data的天真理解,我有两个选择。 (1)创建另一个名为AppleEmployees的实体,该实体具有与Person的多对多关系,并在必要时将人员添加到AppleEmployee实体。或者(2)在Person实体上创建一个跟踪该Person雇主的属性,并相应地过滤获取请求。
注意:我并不担心跟踪许多不同的雇主(继续这个比喻)。一个人要么为苹果工作,要么不为;我的批判性调查是能够取得Apple员工。 :)
所以我的问题归结为:这些方法是否可行?如果是这样,哪个最好?还有更好的方法吗?
答案 0 :(得分:1)
我会使用公司和人员管理的对象执行此操作。然后给了一家名为“Apple”的公司:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Company"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"name == %@", @"Apple"];
[request setPredicate:predicate];
NSArray *results = [managedObjectContext executeFetchRequest:request error:nil];
Company *apple = [results lastObject];
NSSet *applePeople = apple.employees;
set applePeople是所有Person管理对象的集合,其中员工与公司名称为“Apple”的关系(此处没有错误检查...如果您使用此处,请添加一些。)
公司管理对象:
属性“name”,NSString *
关系:员工,对很多人,对人,NSSet *
人员管理对象:
属性:“name”,NSString *
属性:“employeeNumber”,NSString *
关系:公司,与公司
中员工关系的反向关系你可以改变这一点。您可能会考虑同时为多家公司工作的承包商,并且与许多公司的关系也是如此。