获取已过滤的数据并再次过滤Coredata中的数据

时间:2016-01-13 05:56:41

标签: ios objective-c core-data nspredicate nsfetchrequest

我正在研究核心数据。我有一个实体“目录”,它或多或少有20个属性。我正在获取数据并对catalogId使用谓词,而catalogId是实体中的属性。在接收到的数据中,所有实体数据都有重复数据,我必须避免它们。我也用过这个

NSManagedObjectContext *context = [(CategoriesAppDelegate*)[UIApplication sharedApplication].delegate managedObjectContext];
NSFetchRequest* fetch = [NSFetchRequest fetchRequestWithEntityName:@"Tbl_catalogPage"];
NSEntityDescription* entity = [NSEntityDescription entityForName:@"Tbl_catalogPage"inManagedObjectContext:context];
[fetch setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"catalogid == '%@'", catalogId]];
[fetch setPredicate:predicate];
[fetch setPropertiesToFetch:[NSArray arrayWithObjects:[[entity attributesByName]objectForKey:@"pageid"], [[entity attributesByName]objectForKey:@"catalogid"], nil]];
[fetch setResultType:NSDictionaryResultType];
[fetch setReturnsDistinctResults : YES];
NSError* error = nil;
self.resultPageArray = [context executeFetchRequest:fetch error:&error];
NSLog(@"result array count %lu",(unsigned long)self.resultPageArray.count);
NSLog (@"names: %@",self.resultPageArray);
NSLog(@"result array values ");

return resultPageArray;

但它没有用。在Catalog实体中,有一个属性pageId,它在整个实体中重复。我希望使用catalogId的数据,其中具有相同pageId的行应该跳过,我的意思是避免在获取的数据中重复pageId。 提前致谢

1 个答案:

答案 0 :(得分:1)

以下使用两步过程。使用两次提取的原因是:为每个pageid仅选择一个对象,我们必须使用propertiesToGroupBy,这意味着我们必须使用NSDictionaryResultType和b)意味着我们无法获取除了propertiesToGroupBy中指定的属性之外的任何属性(正如您在之前的一个问题中找到的那样)。这两步是:

  1. 获取按pageid分组的NSManagedObjectID。 (虽然您不能指定其他属性,但您可以指定 objectID 。请注意,CoreData将任意选择一个对象{{1 },并使用其objectID。)
  2. 使用(1)返回的objectID获取NSManagedObjects。
  3. 以上代码:

    pageid

    (为简洁起见,省略了错误检查)。