「Category」と「Article」という2つのエンティティがあり、それらは多対多の関係にあります。 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'
目的のデータを取得するオプションはありますか?
コレクションを比較しようとしています(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 SYNTAX
Swift私がしたように...
let predicate = NSPredicate(format: "ANY categories.name = %@", category.name!)
fetchRequest.predicate = predicate
私のために働いた。