我创建了一个测试项目,以学习使用 Core Data。我所做的是,创建两个实体:
- 客户
- 姓名
- 关系 --> 项目(To Many 关系)
- 姓名
- 项目
- 项目
- 关系 --> 客户
- 项目
我创建了 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 个项目)
所以我被困在如何解决这个问题上,因为有几种可能导致这不起作用:
- 谓词不行
- 客户和项目之间的关系不好
- ETC
因此,如果有人可以给我一些指示,那就太好了。