我已经创建了一个测试项目,学习如何使用Core Data。我所做的是,创建两个实体:许多核心数据查询只显示1条记录
- 客户
- 名
- 关系 - >项目(一对多的关系)
- 名
- 项目
- 项目
- 关系 - >客户
- 项目
我已创建2 UITableViewControllers一个显示所有客户端和一个将显示与该客户的所有项目。
为了证明我创造了这个方法,所有相关的项目:
-(NSArray *)relatedProjects:(Client *)client; { NSFetchRequest *request = [[NSFetchRequest alloc]init]; NSEntityDescription *e = [[model entitiesByName] objectForKey:@"Project"]; [request setEntity:e]; [request setPredicate:[NSPredicate predicateWithFormat:@"SELF IN %@", client.projects]]; NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"project" ascending:YES]; [request setSortDescriptors:[NSArray arrayWithObject:sd]]; NSError *error; NSArray *result = [context executeFetchRequest:request error:&error]; if (!result) { [NSException raise:@"Fetch failed" format:@"Reason: %@", [error localizedDescription]]; } relatedProjects = [[NSMutableArray alloc] initWithArray:result]; //return result; return relatedProjects;
}
唯一的问题是,是将只显示1个项目,而不是所有的相关项目。 如果我忽略这一行,则会显示所有项目,但是项目和客户之间没有关系。
[request setPredicate:[NSPredicate predicateWithFormat:@"SELF IN %@", client.projects]];
(我的测试用例,我创建1个客户端的几个项目,所以我知道它应该表现出更多的则1个项目)
所以我坚持如何解决这个问题,因为有几个可能性,这是为什么不工作:
- 谓词不是客户和项目之间确定
- 关系也不行
- 等
所以,如果有任何人谁可以给我一些指点,那将是巨大的。
你设定的反比关系?为什么不只是返回'[client.projects allObjects]'? – 2013-04-23 18:31:06
[client.projects allObjects]给出完全相同的输出,所以只返回1条记录。我如何设置反比关系?我认为这是自动设置的? – Eloy 2013-04-23 18:34:34
如果你的意思是在检查员中设置inversie关系,那么我已经完成了。 – Eloy 2013-04-23 18:36:37