根据标记获取联系人

时间:2013-09-05 10:08:57

标签: ios objective-c core-data

我正在尝试修改对联系人的简单核心数据提取请求,以便只查找与某个标记有关系的联系人。联系人和标签都是具有多对多关系的实体。

我理解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;
}

1 个答案:

答案 0 :(得分:0)

使用NSPredicate

假设您通过名称标签与标签相关联,标签实体具有属性名称。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY tags.name = [cd] %@", @"sales"];
[fetchRequest setPredicate:predicate];