Wil*_*con 3 core-data nspredicate ios
我尝试在之前的帖子中构建一个谓词,但最终这样做是因为在3个小时之后,我无法让它工作.
我觉得必须有一个更有效的方法,我也需要谓词不区分大小写.
10,000辆汽车我有轮胎,车轮,座椅作为三个汽车零件我想找到所有有轮胎的汽车.然后我想找到所有有车轮的车.然后我想找到所有有座位的汽车.(我知道很多都会重复,但这就是我需要的)
如果有更有效的方法,请告诉我.另请告诉我如何使谓词不区分大小写.
先感谢您!
-(NSArray*) loadCarsFromCoreData:(NSMutableArray*)inputCarParts{
NSMutableArray *totalResults=[[NSMutableArray alloc]init];
NSFetchRequest *fetchRequest =[[NSFetchRequest alloc]init];
//To find the cars we are using the car parts
NSEntityDescription *entity = [NSEntityDescription entityForName:@"CarParts" inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:entity];
NSError *error;
NSMutableArray *predicates =[self parseCarPartsIntoAPredicateArray:inputCarParts];
for (int i=0; i<[predicates count]; i++) {
[fetchRequest setPredicate:[predicates objectAtIndex:i]];
NSArray *records = [[self managedObjectContext] executeFetchRequest:fetchRequest error:&error];
NSLog(@"results = %i",[records count]);
[totalResults addObjectsFromArray:records];
}
NSLog(@"results = %i",[totalResults count]);
return [NSArray arrayWithArray:totalResults];
}
-(NSMutableArray*)parseCarPartsIntoAPredicateArray:(NSMutableArray*)inputCarParts{
NSMutableArray *returnArray=[[NSMutableArray alloc]init];
for (int i=0; i<[inputCarParts count]; i++) {
NSPredicate *predicate=[NSPredicate predicateWithFormat:@"partName == %@",[inputCarParts objectAtIndex:i]];
[returnArray addObject:predicate];
}
return returnArray;
}
Run Code Online (Sandbox Code Playgroud)
Tom*_*ton 11
听起来你真正想要的是如何根据可能的匹配数组构建谓词.在这种情况下,你会做这样的事情:
NSMutableArray *partPredicates = [NSMutableArray arrayWithCapacity:[inputCarParts count]];
for (NSString *partName in inputCarParts) {
NSPredicate *currentPartPredicate = [NSPredicate predicateWithFormat:@"partName =[c] %@", partName];
[partPredicates addObject:currentPartPredicate];
}
NSPredicate *fullPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:partPredicates];
Run Code Online (Sandbox Code Playgroud)
结果谓词就像partName ==[c] "tire" OR partName ==[c] "wheel" OR partName ==[c] "seat"是每个数组条目一个组件.进行一次取得以一次性评估它们.
如果您在获取中使用它,则不会获得重复结果.您对表明您不想要重复的问题留下了评论.如果是这种情况,那么我不确定我知道很多会重复,但这就是我需要的意思.听起来你想要愚蠢,但你说你没有.
| 归档时间: |
|
| 查看次数: |
5125 次 |
| 最近记录: |