Группировка и сортировка iOS MagicalRecord для табличного представления. Как именно они работают?

У меня есть крошечное тестовое приложение, использующее Core Data через MagicalRecord, чтобы научиться группировать действия по категориям. Я хочу отобразить данные в сгруппированном табличном представлении с именами всех действий, имеющих общую категорию, сгруппированных вместе по категориям. Соответственно, у меня есть объект с именем ListActivity, который имеет два атрибута: «имя» и «категория», оба строковые.

В настоящее время я использую:

frc = [ListActivity MR_fetchAllGroupedBy:@"category" withPredicate:nil sortedBy:@"name" ascending:YES];

На мой взгляд (не имея возможности найти четкую документацию об обратном), это кажется отвечающим всем требованиям, но не так.

На следующем снимке экрана я ввел действие под названием "a" в категории "K".

введите здесь описание изображения

Пока нормально. Затем я ввожу действие с именем "k" в категорию "A".

введите здесь описание изображения

В то время как категории, кажется, правильно упорядочиваются как названия разделов через:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
    id <NSFetchedResultsSectionInfo> sectionInfo = [[frc sections] objectAtIndex:section];
    return [sectionInfo name];

}

сами действия плавают прямо и вне группы (категории), к которой они относятся, но остаются в алфавитном порядке.

Я был во всем Интернете, во всем SO, Github и т. д., и не могу найти ничего, что объясняло бы поведение группировки и сортировки методов fetchAll и findAll MR, кроме как в общих чертах. Может ли кто-нибудь с опытом работы с MagicalRecord помочь или указать мне документацию или учебник?

Спасибо!


person rattletrap99    schedule 14.01.2014    source источник


Ответы (1)


Помощник по группировке в MagicalRecord — это просто удобный метод поверх NSFetchResultsController. Любая документация, относящаяся к этому классу, напрямую относится к этому методу. Единственное дополнительное предостережение относительно методов MagicalRecord заключается в том, что они будут выполнять выборку за вас. Кроме того, вам может потребоваться повторная выборка (или использование MR_performFetch) данных, чтобы обновления ваших данных отражались в данных, которые у вас есть в памяти.

Тем не менее, ваша группировка зависит от нескольких вещей в модели данных. Атрибут категории должен присутствовать в данных объекта, которые вы группируете. Похоже, у вас есть этот шаг. Если вы хотите реагировать на изменения в данных, вам необходимо реализовать протокол NSFetchedResultsControllerDelegate и установить делегат на NSFRC, возвращаемый методами MR_fetchAll*.

Я предлагаю взглянуть на примеры NSFetchedResultsController, так как они напрямую применимы ко всем использованиям помощников выборки MagicalRecord.

person casademora    schedule 14.01.2014
comment
Хорошо, @casa, спасибо. Я надеялся избежать глубоких сорняков, но я, конечно, не могу просить более высокого авторитета по MagicalRecord. Я читал документы Apple и буду продолжать. - person rattletrap99; 15.01.2014