Core data 核心数据:预测多对多关系。(“此处不允许使用多个键”)

Core data 核心数据:预测多对多关系。(“此处不允许使用多个键”),core-data,ios,nspredicate,Core Data,Ios,Nspredicate,我有两个名为“Category”和“Article”的实体,它们具有多对多关系。我想形成一个谓词,搜索category.name等于某个值的所有项目。我有以下资料: NSEntityDescription *entityArticle = [NSEntityDescription entityForName:@"Article" inManagedObjectContext:managedObjectContext]; NSSortDescriptor *sortDescripto

我有两个名为“Category”和“Article”的实体,它们具有多对多关系。我想形成一个谓词,搜索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];
我收到的错误是,
***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因是:“此处不允许使用多个密钥”


是否有检索所需数据的选项?

您正在尝试将集合(
categories.name
)与标量值(
category.name
)进行比较。您需要使用集合比较器(
包含
),或使用谓词修饰符(
任何
/
所有
/
部分
),等等)

尝试使用:

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


SWIFT语法

万一有人像我一样在swift上看到这篇文章

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

为我工作。

为那些面临同样问题的人。您可以在操作符中使用而不是=/=来查找任何集合中的特定对象。
寻找参考资料。Swift或Objective-C没有区别

这对我来说很有效,无论有没有“[cd]”。你能详细说明一下它的功能吗?@DuncanBabbage,
[cd]
的意思是进行不区分大小写(c)和不区分重音(d)的搜索。如果
类别
与“Article”的关系与一个相反,它就不起作用了。知道如何断言吗?子查询也可能是您所需要的。请参阅:最新信息:
let predicate = NSPredicate(format: "ANY categories.name = %@", category.name!)
fetchRequest.predicate = predicate