Tic*_*cko 13 iphone core-data objective-c ios
基本上我在我的数据模型中有3个实体:Brand,Model和Trim.
拥有一系列修剪对象,我想让所有品牌都拥有一个"包含"此阵列中至少包含一个修剪的模型.
所以这是我的获取请求的谓词:
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Brand"];
[NSPredicate predicateWithFormat:@"ANY models.trims IN %@", arrayOfTrims];
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'unimplemented SQL generation for predicate : (ANY models.trims IN {<Trim: 0x8e60340> (entity: Trim; id: 0x8e62f10 <x-coredata://BCD28560-AED5-4409-9A35-1925001773E6/Trim/p8>
Run Code Online (Sandbox Code Playgroud)
我是Core Data的新手,我不知道我做错了什么.
希望有人能提供帮助,
非常感谢.
Mar*_*n R 28
Core Data谓词中的"ANY"仅适用于单个到多个关系.由于您的查询涉及两对多关系,因此您必须使用SUBQUERY:
[NSPredicate predicateWithFormat:@"SUBQUERY(models, $m, ANY $m.trims IN %@).@count > 0",
arrayOfTrims];
Run Code Online (Sandbox Code Playgroud)
在CoreData操作中使用谓词时,该谓词将转换为SQL。并非所有NSPredicate操作都无法进行这种转换,而您遇到的并非如此。我的建议是:
NSMutableArray* predicates = [NSMutableArray new];
for(NSString* trim in arrayOfTrims)
{
[predicates addObject:[NSPredicate predicateWithFormat:@"%@ IN models.trims", trim]];
}
NSPredicate* predicate = [NSCompoundPredicate orPredicateWithSubpredicates:predicates];
Run Code Online (Sandbox Code Playgroud)
IN可以使用该关键字,但不能同时应用ANY,因为在将其转换为SQL时这没有意义。
您最有可能寻找的谓词是:
[NSPredicate predicateWithFormat:@"models.trims IN %@", arrayOfTrims];
Run Code Online (Sandbox Code Playgroud)
但这在这种情况下也不起作用,因为您正在经历一段恋爱关系。因此,您需要做的是颠倒整个过程:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Model"];
[request setPredicate:[NSPredicate predicateWithFormat:@"trims in %@", arrayOfTrims]];
NSError *error = nil;
NSArray *modelArray = [moc executeFetchRequest:request error:&error];
if (!modelArray) {
NSLog(@"Error: %@\n%@", [error localizedDescription], [error userInfo]);
}
NSArray parentObjectArray = [modelArray valueForKey:@"${PARENT_RELATIONSHIP_NAME}"];
Run Code Online (Sandbox Code Playgroud)
基本上,您要获取子对象以满足您的需求ANY,然后使用KVC来检索您关心的父对象。
| 归档时间: |
|
| 查看次数: |
8749 次 |
| 最近记录: |