核心数据:NSP预测多对多关系。 (“这里不允许的多键”)

我有两个实体,分别是“分类”和“文章”,它们之间有多对多的关系。 我想形成一个谓词,它searchcategory.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];