Подтвердить что ты не робот

Основные данные: NSPredicate для отношений "многие-ко-многим". (ключ "to-many" здесь не разрешен ")

У меня есть два объекта с именем "Категория" и "Статья", которые имеют отношение "многие-многие". Я хочу создать предикат, который ищет все статьи, где category.name равно некоторому значению. У меня есть следующее:

 NSEntityDescription  *entityArticle   = [NSEntityDescription entityForName:@"Article" inManagedObjectContext:managedObjectContext]; 
 NSSortDescriptor  *sortDescriptor   = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];
 NSArray     *sortDescriptors  = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
 NSPredicate    *predicate    = [NSPredicate predicateWithFormat:@"categories.name == [cd] %@", category.name]; 

 [request setSortDescriptors:sortDescriptors];
 [request setEntity:entityArticle];
 [request setPredicate:predicate];

 NSMutableArray *results = [[managedObjectContext executeFetchRequest:request error:nil] mutableCopy];

 if ([results count] > 0)
  NSLog(@"Results found."); 
 else 
  NSLog(@"NO results found."); 

 [request release];
 [sortDescriptor release];
 [sortDescriptors release];

Я получаю ошибку *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here'

Есть ли какие-либо опции для получения желаемых данных?

4b9b3361

Ответ 1

Вы пытаетесь сравнить коллекцию (categories.name) со скалярным значением (category.name). Вам нужно либо использовать компаратор сравнения (CONTAINS), либо использовать модификатор предиката (ANY/ALL/SOME и т.д.).

Попробуйте использовать:

[NSPredicate predicateWithFormat:@"ANY categories.name =[cd] %@", category.name];

Или:

[NSPredicate predicateWithFormat:@"categories.name CONTAINS[cd] %@", category.name];