使用NSFetchedResultsController创建一个分段的UITableView

时间:2012-01-05 19:45:22

标签: objective-c xcode uitableview nsfetchedresultscontroller

我正在尝试创建一个包含两个不同部分的UITableView。我知道我可以将它们分组到托管对象的属性上。例如,如果我想按name分组,我会这样做:

[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest 
                         managedObjectContext:_context 
                         sectionNameKeyPath:@"name" 
                         cacheName:@"uploadProperties"];

我返回的分数如:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return [[_fetchedResultsController sections] count];
}

但问题是我不想按属性(例如名称)对其进行分组。我想将它们分组为特定值,即一个部分包含pud_id = 0,另一个部分包含pud_id > 0

我怎样才能做到这一点?是否可以使用where子句?或者我可以在托管对象上创建一个属性,并在sectionNameKeyPath中使用它,例如:

- (BOOL) hasPudZero {
   if (self.pud_id == 0)
      return YES;
   return NO;
}

...

感谢您的投入!

1 个答案:

答案 0 :(得分:0)

也许你可以创建一个NSString类型的瞬态属性,它返回两个字符串之一?

- (NSString *)sectionIdentifier
{
    [self willAccessValueForKey:@"sectionIdentifier"];
    NSString *tmp = [self primitiveValueForKey:@"sectionIdentifier"];
    [self didAccessValueForKey:@"sectionIdentifier"];

    if (!tmp) {
       if (self.pud_id == 0) {
          tmp = @"SectionOne";
       } else {
          tmp = @"SectionTwo";
       }
       [self setPrimitiveValue:tmp forKey:@"sectionIdentifier"];
    }
    return tmp;
}

然后在创建NSFetchedResultsController时使用sectionNameKeyPath:@"sectionIdentifier"。如果put_id的值发生变化,请确保将sectionIdentifier的原始值设置为nil。