Создайте секционированный UITableView, используя NSFetchedResultsController - PullRequest
0 голосов
/ 05 января 2012

Я пытаюсь создать 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 голосов
/ 06 января 2012

Возможно, вы могли бы создать временный атрибут типа 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;
}

, а затем использовать sectionNameKeyPath:@"sectionIdentifier" при создании NSFetchedResultsController.Убедитесь, что вы установили значение примитива sectionIdentifier обратно на ноль, если значение put_id изменяется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...