现在我想在这两个实体之间执行过滤或搜索操作。
任何人都可以帮助我。
答案 0 :(得分:1)
您无法一次从两个实体获取,而是应该单独获取并合并。
要从CoreData获取已过滤的项目,您应该将 NSFetchRequest 与 NSPredicate 一起使用。
编写一个通用方法来从任何应用过滤器,排序等的实体中获取
+ (NSArray *)getItemsInEntity : (NSEntityDescription *)entity FilteredByPredicate : (NSPredicate *)predicate sortedBy : (NSArray *)sortDescriptors inContext : (NSManagedObjectContext *)managedObjectContext{
NSFetchRequest *request = [[NSFetchRequest alloc]init];
[request setEntity:entity];
[request setPredicate:predicate];
[request setSortDescriptors:sortDescriptors];
NSError *error;
NSArray *results = [NSArray arrayWithArray:[managedObjectContext executeFetchRequest:request error:&error]];
return results;
}
使用上述方法获取两个实体中的项目并合并结果
NSEntityDescription *productEntity = [NSEntityDescription entityForName:@"Product" inManagedObjectContext:managedObjectContext];
NSPredicate *productPredicate = [NSPredicate predicateWithFormat:@"yourProperty = searchValue"];
NSArray *products = [DMDictation getItemsInEntity:productEntity FilteredByPredicate:productPredicate sortedBy:Nil inContext:managedObjectContext];
NSEntityDescription *priceListEntity = [NSEntityDescription entityForName:@"PriceList" inManagedObjectContext:managedObjectContext];
NSPredicate *priceListPredicate = [NSPredicate predicateWithFormat:@"yourProperty = searchValue"];
NSArray *priceLists = [DMDictation getItemsInEntity:priceListEntity FilteredByPredicate:priceListPredicate sortedBy:Nil inContext:managedObjectContext];
NSMutableArray *combinedArray = [NSMutableArray array];
[combinedArray addObjectsFromArray:products];
[combinedArray addObjectsFromArray: priceLists];