由于数据库结构有点复杂,我很难解决这个谓词问题。我有以下的数据库结构,或者至少是值得关注的一个问题:复杂的NSPredicate遍历多个实体和关系类型
PUBLISHER < < --- >>公关< < --BOOK < < --->作者< < - >>代理
我试过以下谓词,当我遍历过去的关系时使用过,但没有达到这个程度。我要指出,我有一个NSArray与代理商的名字,我想查询对数据库,以确定出版社代理的工作原理与列表:
NSArray *agentNames = [NSArray arrayWithObjects:Dan, Hunter, Sloan, Jackson];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
request.entity = [NSEntityDescription entityForName:@"Publisher" inManagedObjectContext:context];
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor
sortDescriptorWithKey:@"publisherName" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)] ];
request.predicate = [NSPredicate predicateWithFormat:@"ANY pubHouse.publicist.assignedBook.authorRep.agentName IN %@", [agentNames valueForKey:@"agentName"]];
request.fetchBatchSize = 20;
NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
当我运行前面的谓语我得到以下警告:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unimplemented SQL generation for predicate : ANY pubHouse.publicist.assignedBook.authorRep.agentName IN
我相信,当我将书实体关系传送到作者实体,然后到达代理实体时谓词会中断。在这一点上,建议会有所帮助。由于
你的NSArray agentNames中有哪些变量? NSManagedObject的子类?字典? – Mundi
您的实体之间的所有关系是否只是定期的旧关系,或者是关于它们的任何“特别”?另外,'authorRep.agentName'看起来有点好奇。 'agentName'真的是你作者代理关系的名字吗?还是你的意思是像'authorRep.agent.agentName'? –
这是从前一个视图控制器传递的一个Agent对象数组,用户可以选择他们想要查询的代理。我以前用这种方法取得了成功。我在这个问题中以这样一种方式显示了示例数组,以帮助那里的优秀的撒玛利亚人明白我想要完成的事情。感谢您付出的努力。 – dman