NSFetchedResultsController在循环中检查属性值

时间:2014-02-20 05:38:56

标签: ios core-data

我在viewDidLoad方法中有这段代码来检查UITableView部分的名称。我需要的是一种在同一方法中创建类似循环的方法,以便能够从所有存储对象中知道属性值。核心数据实体在名为ToDoItem的NSManagedObject子类中定义。

  for(int i = 0; i < [[self.fetchedResultsController sections] count]; i++)
  {
      id <NSFetchedResultsSectionInfo> theSection = [[self.fetchedResultsController sections]objectAtIndex:i];
      NSString *sectionName = [theSection name];
      if ([sectionName isEqualToString:@"0"])
      { 
          haySeccion0 = @"si";
      }
  }

2 个答案:

答案 0 :(得分:0)

听起来您想要检查所有对象,然后根据对象上的属性对某个部分执行操作。

为什么不枚举所有对象,然后使用indexPathForObject来检索节。

目前尚不清楚为什么需要按部分进行此部分..

答案 1 :(得分:0)

我的建议是:

仅获取您需要的内容:

NSManagedObjectContext* context = [[NSManagedObjectContext alloc] init] //or use your current context;
context.persistentStoreCoordinator = //Get the coordinator

NSExpressionDescription* objectIdDesc = [NSExpressionDescription new];
objectIdDesc.name = @"objectID";
objectIdDesc.expression = [NSExpression expressionForEvaluatedObject];
objectIdDesc.expressionResultType = NSObjectIDAttributeType;

NSFetchRequest* r = [NSFetchRequest fetchRequestWithEntityName:@"EntityName"];
[r setResultType:NSDictionaryResultType];
[r setPropertiesToFetch:@[objectIdDesc,@"borrar"]];
[r setPredicate:[NSPredicate predicateWithFormat:@"has0Section = %@",@"si"]];
NSError* error = nil;
NSArray* results = [context executeFetchRequest:r error:&error];
//Error handling ...

结果现在将包含第0部分及其borrar属性的所有对象(如字典),执行您喜欢的任何逻辑。

您可以在后台执行此代码并将map设置为视图控制器的某个私有变量(在需要时同步某些锁定)。