Лучше всего это очень гибкая NSFetchedResultsController
. У вас будет запрос на выборку, который просто извлекает объект Product, отсортированный по атрибуту date. Обратите внимание: основные атрибуты данных должны начинаться с небольшой буквы.
Вы должны создать выбранный контроллер результатов с чем-то вроде следующего. Проверьте коды образца Apple (включая шаблоны Xcode), где это, как правило, созданные лениво контроллере представления:
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Product"];
request.sortDescriptors = @[ [NSSortDescriptor
sortDescriptorWithKey:@"dateRegistered"
ascending:YES] ];
_fetchedResultsController = [NSFetchedResultsController
initWithFetchRequest:request
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:@"dateRegistered"
cacheName:"Root"];
Это будет работать только в том случае, если сроки действительно одинаковы для каждого дня. Вероятно, вы захотите использовать строку, для которой для типа NSDate
будет точная разбивка секунд, и вы будете считать один в каждой «группе».
С помощью получателя результатов вы можете легко получить доступ ко всем нужным вам номерам. Например. подсчет «группа» номер i
(правильная терминология «раздел»):
id <NSFetchedResultsSectionInfo> sectionInfo =
[[_fetchedResultsController sections] objectAtIndex:i];
int count = [sectionInfo numberOfObjects];
Вы можете сделать гораздо больше с извлеченным контроллером результатов! Он будет управлять памятью для вас, облегчать отображение в вашем пользовательском интерфейсе (например, представления таблиц или виды коллекций) и минимизировать нагрузку на постоянное хранилище.
поэтому, если у меня есть два продукта, первый зарегистрирован с начала дня, а второй зарегистрирован в конце дня, у меня будет два раздела справа? есть ли предикат сравнения для переопределения сравнения дат? – taffarel
также есть какая-либо техника для ленивой загрузки по каждому разделу? – taffarel
1) Вы должны создать отдельный атрибут только для даты. Вы можете использовать выбранное свойство (которое вычисляется «на лету»). См. Образец кода Apple «DateSectionTitles» [здесь] (http://developer.apple.com/library/ios/#samplecode/DateSectionTitles/Introduction/Intro.html). 2) ленивая загрузка включалась автоматически в выбранный контролер результатов ;-))! – Mundi