我正在尝试修改对联系人的简单核心数据提取请求,以便只查找与某个标记有关系的联系人。联系人和标签都是具有多对多关系的实体。
我理解Core Data我可以通过首先获取标记对象,然后调用 tag.contact 来实现这一点,但我不想这样做因为其余代码依赖于fetchResultsController返回联系人对象,而不是标记对象这一事实。
如果我要进行关系数据库处理,我可以进行简单的跨表查询并查找具有特定标记的所有联系人。是否有简单方式可以通过Core Data复制此内容?
-(NSFetchedResultsController *) fetchedResultsController {
//if fetch controller already exists
if(_fetchedResultsController != nil) {
return _fetchedResultsController;
}
//create a new fetch request
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contact"
inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName"
ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
//instantiate the fetch controller with the fetch request and sort by last name into sections
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[self managedObjectContext] sectionNameKeyPath:nil cacheName:nil];
//declare delegate of fetch controller as self
_fetchedResultsController.delegate = self;
NSLog(@"fetchResultsController Created");
return _fetchedResultsController;
}
答案 0 :(得分:0)
使用NSPredicate。
假设您通过名称标签与标签相关联,标签实体具有属性名称。
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY tags.name = [cd] %@", @"sales"];
[fetchRequest setPredicate:predicate];