【发布时间】:2014-03-13 15:47:54
【问题描述】:
我有两个实体,A 和 B,以及以下关系:
A -> B - 对许多
B -> A - 对一个
换句话说:A 可以有零个或多个 B,而 B 只能有一个 A。
我想使用 NSFetchedResultsController 在表格视图中显示我的 A 条目,但我想通过 A -> B 关系过滤结果。 为此,我有一个 UISegmentedControl,如果用户点击第一个片段,我只想显示与 B 至少有一个关系的 A 条目,如果点击第二个片段,我只想显示没有关系的条目与 B.
我正在使用 CoreData 的 NSManagedObject,所以我的 A 对象有一个 NSSet 属性,其中所有 B 条目都与 A 有关系。
这就是我实例化我的 NSFetchedResultsController 的方式:
NSManagedObjectContext *context = self.managedObjectContext;
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:"A" inManagedObjectContext:self.managedObjectContext];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:descriptorKey ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[fetchRequest setEntity:entity];
NSFetchedResultsController *controller = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:context
sectionNameKeyPath:controllerKey
cacheName:nil];
NSError *error;
BOOL success = [controller performFetch:&error];
if (success) {
return controller;
}
此代码获取所有 A 条目,我该如何制作该过滤器?
【问题讨论】:
-
您的提取请求没有谓词。这就是您定义过滤器的地方。
-
但是我怎样才能创建一个谓词来按关系过滤呢?我正在尝试验证 NSSet 计数,但到目前为止没有成功。
标签: ios objective-c uitableview core-data nsfetchedresultscontroller