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