具有已定义属性值的核心数据对象的数量

时间:2014-01-26 08:38:22

标签: ios core-data

我正在使用以下获取请求来删除核心数据对象:

NSEntityDescription *entity=[NSEntityDescription entityForName:@"entityName" inManagedObjectContext:context];
  NSFetchRequest *fetch=[[NSFetchRequest alloc] init];
  [fetch setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(value1 == %@) AND (value2 == %@)", data1, data2];
 [fetch setPredicate:predicate];
  //... add sorts if you want them
  NSError *fetchError;
  NSArray *fetchedData=[self.moc executeFetchRequest:fetch error:&fetchError];
 for (NSManagedObject *product in fetchedProducts) {
    [context deleteObject:product];
  }

我需要的是仅当[value1 isEqualToString: @"borrar"]核心数据实体中的对象数量大于1时才执行获取请求。如何添加此条件?

*** EDIT 属性value1是一个瞬态属性。

2 个答案:

答案 0 :(得分:1)

NSPredicate *predicate=[NSPredicate predicateWithFormat:@"(Value1 == borrar)"];
[fetch setPredicate:predicate];
NSError *fetchError;
NSArray *fetchedData=[self.moc executeFetchRequest:fetch error:&fetchError];
for(int i=0;i<fechedData.count;i++){
     [context deleteObject:[fechedData objectAtIndex:i]valueForKey:@"Value1"];
}

答案 1 :(得分:1)

要检查存在多少具有给定属性值的对象,请使用countForFetchRequest:

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"entityName"];
[request setPredicate:[NSPredicate predicateWithFormat:@"value1 = %@", @"borrar"]];
NSError *error;
NSUInteger count = [self.moc countForFetchRequest:request error:&error];
if (count == NSNotFound) {
    // some error occurred
} else if (count > 1) {
    // more the one object with "value1 == borrar"
} 

更新(根据编辑过的问题):您不能使用瞬态属性 在核心数据获取请求中。如果“value1”是瞬态属性,则只能 使用“value2 == something”获取所有对象,然后迭代所获取的对象 用于检查是否存在多个具有“value1 == borrar”的对象的数组。