我在导航控制器层次结构中有两个tableview控制器。第一个包含父实体,我已经从核心数据实体获取请求成功填充了这些实体。我在父实体中创建了一个与子实体的一对多关系,似乎正在添加子实体。我可以将它与所有父母的所有孩子一起填充,但不能将其限制为当前的父母。我尝试在子tableview控制器获取请求中使用谓词但没有成功。
我是否应该使用includesSubEntities并保留请求中使用的父实体?如果是这样,我会以某种方式使用委托协议吗?
以下代码适用于子tableview。注释掉的位是不同的尝试!
感谢。
- (NSFetchedResultsController *)fetchSerials
{
if ( !_fetchSerials )
{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity =
[NSEntityDescription entityForName:@"Serial"
inManagedObjectContext:AppDelegatePtr.managedObjectContext];
// NSPredicate *predicate = [NSPredicate predicateWithFormat:@"inExercise.name = '%@'", [[SMNetworkModel sharedInstance] selectedNarrative]];
// [fetchRequest setPredicate:predicate];
// [fetchRequest setRelationshipKeyPathsForPrefetching:@[@"inExercise"]];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"narrative" ascending:YES];
[fetchRequest setSortDescriptors:@[sortDescriptor]];
_fetchSerials = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:AppDelegatePtr.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
_fetchSerials.delegate = self;
NSError *error;
if ( ![_fetchSerials performFetch:&error] )
NSLog(@"fetch error: %@", error.localizedDescription);
}
return _fetchSerials;
}
答案 0 :(得分:0)
一个愚蠢的错字加上我对我的新朋友Core Data的理解不足,这一切都阻止了Predicates的工作。
我错误地认为你传递了objectIds而不是对象本身。
取消注释涉及谓词的两行,并将selectedNarrative更改为正确的属性,这一切都有效!