【发布时间】:2013-11-19 15:58:55
【问题描述】:
我正在尝试查找对象的所有实例,这些实例包含对我的对象图中的单独对象组合的引用。
recommendation
可能包含以下三个对象中的一个或多个:
damageType
areaDamaged
validVehicles
此结构是从现有系统文件格式的导入构建的,我无法重新构建对象图。
我正在使用NSPredicate 来查找所有recommendation 对象与damageType 匹配的选定损坏如下:
NSFetchRequest *fetchRequestDamages = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass([Recommendation class])];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY damageType == %@", _currentRecordedDamage.damageType];
但希望过滤器返回与特定damageType、areaDamaged 和validVehicle 匹配的所有Recommendations
我试过了
NSMutableArray *predicates = [[NSMutableArray alloc] initWithCapacity:2];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY damageType == %@", _currentRecordedDamage.damageType];
[predicates addObject:predicate];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"ANY areaDamaged == %@", _currentAreaDamaged];
[predicates addObject:predicate2];
NSPredicate *predicate3 = [NSPredicate predicateWithFormat:@"ANY validVehicles == %@", _currentVehicle];
[predicates addObject:predicate3];
fetchRequestDamages.predicate = [NSCompoundPredicate andPredicateWithSubpredicates:predicates];
fetchRequestDamages.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequestDamages managedObjectContext:[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext sectionNameKeyPath:nil cacheName:nil];
self.fetchedResultsController.delegate = self;
NSError *error;
[self.fetchedResultsController performFetch:&error];
int resultsFound = self.fetchedResultsController.fetchedObjects.count;
但这似乎返回满足任何谓词的所有对象的集合 - 我想要匹配所有三个的对象集合。
我正在考虑使用 SUBQUERY,但不太明白如何创建此查询?
【问题讨论】:
-
执行获取请求的代码是什么?
-
@davbryn:所以你已经按照我下面的建议做了。 - 也许你可以举一个例子来说明你目前得到了什么以及你期望什么。
-
damageType 和 areaDamaged 和 validVehicles to-many 关系是否来自推荐?如果不是简单地选择 AndrewShmigs。如果是,那么您将需要子查询。
-
@FelixLam 是的,它们都是对多的
-
也许看看我在这里给出的回复:stackoverflow.com/questions/3725936/…
标签: ios objective-c core-data nspredicate