【发布时间】:2014-06-04 04:49:06
【问题描述】:
假设我的数据模型有两个实体:Department 和 Person。 Departments 与 Person 有一个称为“departmentToPerson”的对多关系。 Person 与 Department 具有称为“personToDepartment”的一对一关系。
我想填充属于选定部门的一组人员。为了选择部门,我创建了一个 UILabel,它显示了从弹出表视图中选择的部门名称。当我运行应用程序时,日志显示:
personToDepartment.departmentName ==(实体: 部门;编号:0x8cc1920 ; 数据: { 部门名称 = 市场营销; departmentToPerson = "";
我已经阅读了错误的目的并实现了 setRelationshipKeyPathsForPrefetching,但我仍然遇到了错误。我会声明我是新手,可能会遗漏一些明显的东西。当我删除谓词时,我的表视图会填充所有 personName。代码如下:
- (NSFetchedResultsController *)fetchedResultsController {
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Person" inManagedObjectContext:_managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"personToDepartment.departmentName = %@", selectedDepartment];
NSLog(@"predicate is: %@",predicate);
[fetchRequest setPredicate:predicate];
[fetchRequest setRelationshipKeyPathsForPrefetching:[NSArray arrayWithObjects: @"departmentToPerson", nil]];
fetchRequest.returnsObjectsAsFaults = NO;
NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"personName" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[fetchRequest setFetchBatchSize:20];
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:_managedObjectContext sectionNameKeyPath:nil
cacheName:nil];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;
return _fetchedResultsController;
}
再次,我从 UILabel 中选择了一个新部门,日志显示 selectedDepartment,但随后显示关系错误并且不填充表。
提前感谢您的帮助!
6 月 9 日更新
我也发现这很有效:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"personToDepartment = %@", selectedDepartment];
【问题讨论】:
标签: core-data relationship fetch predicate fault