2

我有一个核心数据模型,如下所示:

一个ServiceProvider实体可以有许多Service实体(一对多关系)。每个服务都有一个type属性。

如何使用实体的type属性Service来搜索ServiceProviders具有该类型的服务?

下面是我目前拥有的适用于单一服务关系的示例。如何修改以下谓词以适用于多种服务?

  NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSManagedObjectContext* context = [HealthDataManager sharedInstance].managedObjectContext;

    NSEntityDescription *entity = [NSEntityDescription entityForName:@"ServiceProvider" inManagedObjectContext:context];
    [fetchRequest setEntity:entity];



    [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"self.service.type == %i",type]];

    NSArray* results = [context executeFetchRequest:fetchRequest error:nil];

    if(results.count>0)
    {
        for(ServiceProvider* provider in results)
        {
            DLog(@"found provider: %@", [provider description ]);
        }
        return [results lastObject];
    }else{
        DLog(@"Creating provider" );
    }
4

2 回答 2

7

要查找具有给定类型的任何相关服务的对象,请使用谓词

[NSPredicate predicateWithFormat:@"ANY services.type == %i",type];

(假设“服务”是 to-name 关系的名称)。

于 2013-06-14T13:28:53.150 回答
2

您需要为此使用子查询:NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(service, $service, $service.type == %i).@count) > 0"];.

有关子查询和其他谓词如何工作的更多信息,您应该查看Predicate Programming Guide

于 2013-06-14T13:30:30.330 回答