首先,我要为这个愚蠢的问题道歉。不幸的是,在阅读了这么多帖子后,我无法弄清楚如何实现。对不起。所以,这是我的问题:我有两个实体,地区和国家。每个地区属于一个国家,每个国家都有几个地区。在我的应用程序中,我选择了一个国家并希望显示其所有区域。为了保持简单,国家和地区都具有属性名称,并且区域具有关系“国家”。现在我必须选择一个国家的所有地区:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *desc = [[model entitiesByName] objectForKey:@"Region"];
[request setEntity:desc];
NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sd]];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"any country LIKE[c] 'aCountry'"];
[request setPredicate:predicate];
那个看起来不错,但不起作用,因为国家是一种关系,因此国家的名称不存储在关系中,而是存储在实体国家。然后我尝试了另一种方式:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"any Country.name LIKE[c] 'aCountry'"];
这会导致错误:
NSInvalidArgumentException',原因:'在实体中找不到keypath Country.name
现在,获取我的地区的最佳方式是什么?
答案 0 :(得分:1)
如果aCountry
是国家/地区实体的对象,
和 country 是从 Region 到 Country 的一对一关系,
然后,以下获取请求将查找该国家/地区的所有区域:
Country aCountry = ... ;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Region"];
// ... add sort descriptor (optional)
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"country = %@", aCountry];
[request setPredicate:predicate];
但请注意,如果您还从国家/地区到地区定义了反对多关系地区,那么您将获得所有地区国家只是
NSSet *regionsForCountry = aCountry.regions;
或者,如果您更喜欢数组:
NSArray *regionsForCountry = [aCountry.regions allObjects];