Вы можете написать NSP-предикат для отношений так же, как для атрибутов.
Например:
- (BOOL)isPerson:(Person *)person memberOfNetwork:(Network *)network {
// assume NetworkMember entity is ivar networkMemberEntity_
// assume NSManagedObjectContext is ivar context_
NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
[fetch setEntity:networkMemberEntity_];
[fetch setPredicate:[NSPredicate predicateWithFormat:
@"(person == %@) AND (networks CONTAINS %@)", person, network]];
[fetch setFetchLimit:1];
NSError *error = nil;
NSInteger count = [context_ countForFetchRequest:fetch error:&error];
if (count < 0) {
// always handle errors in real code
// and never check for errors using "error == nil"
}
return count > 0;
}
В случае, если вы представляете, однако, вы должны тщательно продумать, действительно ли вам нужно это сделать. Похоже, вы пытаетесь смоделировать отношения «многие ко многим» между человеком и сетью. Если вы пришли из базы данных, вы можете подумать, что для этого вам нужна таблица соединений и создать промежуточную сущность.
Однако Core Data может управлять всем этим для вас; вы можете создать отношения «многие ко многим» непосредственно между человеком и сетью, и вам не нужно будет поддерживать какой-либо промежуточный объект или таблицу самостоятельно. Так же, как вам не нужно беспокоиться о первичных и внешних ключах при работе со связями в Core Data, платформа работает с такими вещами для вас, позволяя вам работать на уровне объекта.