如何在核心数据iOS中的两个实体之间过滤数据

时间:2014-01-03 07:21:57

标签: ios core-data

  1. 我有两个实体,一个是Product,另一个是PriseList。
  2. 现在我想在这两个实体之间执行过滤或搜索操作。

    任何人都可以帮助我。

1 个答案:

答案 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];