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



у меня есть две сущности с именем "категория" и "Статья", которые имеют отношение "многие ко многим". Я хочу сформировать предикат, который ищет все статьи, где 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'



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

448   2  
ios

2 ответов:

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

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

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

или:

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

СИНТАКСИС SWIFT

в случае, если кто-нибудь случайно наткнется на эту запись в swift, как я сделал...

let predicate = NSPredicate(format: "ANY categories.name = %@", category.name!)
fetchRequest.predicate = predicate

работал для меня.

Comments

    Ничего не найдено.