Базовые данные sectionNameKeyPath Custom String - PullRequest
0 голосов
/ 30 июня 2011

При сортировке таблицы объектов из Базовых данных я хотел бы установить пользовательскую строку для заголовка раздела, содержащего атрибут. Например, я хотел бы, чтобы имя раздела отображало «4 звезды», а не просто 4. Я возился с этим, но кажется, что он раздражается, если я пытаюсь установить для строки sectionNameKeyPath что-то отличное от Атрибут сущности и только атрибут сущности. Вот что работает только для атрибутов, и одна из немногих попыток настроить разрывную строку закомментирована.

NSSortDescriptor *ratingDescriptor = [[NSSortDescriptor alloc] initWithKey:@"starRating" ascending:NO];
    sortDescriptors = [NSArray arrayWithObjects:ratingDescriptor, nameDescriptor, nil];
    [ratingDescriptor release], ratingDescriptor = nil;
    // NSString *starSectionHeading = [NSString stringWithFormat:@"%d Stars", @"starRating"];
    // sectionKeyPath = starSectionHeading;
sectionKeyPath = @"starRating";

Ответы [ 4 ]

1 голос
/ 02 июля 2011

Установите для вашего sectionNameKeyPath значение «starRating», но затем измените вывод в табличном представлении.FRC отсортирует и упорядочит вещи по разделам, вам просто нужно изменить то, что вы обычно отображаете как строку заголовка.

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section 
{
    // Display the stars as section headings.
    int stars = [[[[fetchedResultsController sections] objectAtIndex:section] valueForKey:@"name"] intValue];
    if(stars == 1)
    {
        return @"1 Star"
    }
    else
    {
        return [NSString stringWithFormat:@"%u Stars", stars];
    }
}

Я делаю это в некоторых табличных представлениях, где выходной формат обрабатывается вобщая мода (я делегирую заголовки заголовков другому классу контроллера, учитывая первый путь дескриптора сортировки и значение заголовка).Таким образом, вы не ограничены жестким кодированием методов делегата табличного представления, таких как приведенный выше код.

У вас также есть возможность локализовать строку и здесь, мне приходится иметь дело с 15 локализациями в моем приложении, и у вас естьдумать о вещах немного иначе при локализации.

1 голос
/ 01 июля 2011

Предполагается, что sectionNameKeyPath - это ключевой путь, то есть имя отдельного атрибута или имя отношения, которое заканчивается одним атрибутом.Вы пытаетесь создать композицию из двух атрибутов, а FRC не поддерживает это автоматически.

Чтобы получить что-то более причудливое, вам придется создать подкласс NSFetchedResultsController. Из документов.

Вы создаете подкласс этого класса, если хотите настроить создание разделов и заголовков индекса.Вы переопределяете sectionIndexTitleForSectionName: если вы хотите, чтобы заголовок индекса раздела отличался от заглавной первой буквы имени раздела.Вы переопределяете sectionIndexTitles, если хотите, чтобы заголовки индекса отличались от массива, созданного путем вызова sectionIndexTitleForSectionName: во всех известных разделах.

0 голосов
/ 08 октября 2012
(NSString *)tableView:(UITableView *)aTableView titleForHeaderInSection:(NSInteger)section
{
    if ([self.fetchedResultsController sections].count > 0) {
        id <NSFetchedResultsSectionInfo> sectionInfo = 
            [[self.fetchedResultsController sections] objectAtIndex:section];
        return [sectionInfo name];
    }
    return nil;
}
0 голосов
/ 03 июля 2011

Посмотрите на этот ответ с созданием переходного атрибута: NSFetchedResultsController с разделами, созданными по первой букве строки

, просто измените некоторые имена, и в вашей версии CommitteeNameInitial заменить:

[[self committeeName] substringToIndex:1];

с

[NSString stringWithFormat:@"%@ Stars", [self starRating]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...