Агрегирование дней в недели в основных данных - PullRequest
0 голосов
/ 05 августа 2011

Кто-нибудь получил какие-либо советы по этой проблеме, с которой я сталкиваюсь.Это не сложно, но может быть более чистый способ сделать это в Core Data.

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

Я хочу сгруппировать их по неделям, поэтому объедините все строки, в которых неделя имеет определенное число.

Пример:мои данные в настоящее время отображаются так

1008 5 августа |5 4 августа |18 3 августа |8 2 августа |3 1 августа |10 31 июля |2 30 июля |1 29 июля |7 28 июля |6

и т. Д.

Я хочу отобразить это так:

  • Неделя 24 |47
  • Неделя 23 |13
  • Неделя 22 |20

и т. Д.

Я уже использую NSFetchedResultsController и хотел бы продолжать использовать это, если это возможно.Я думаю, в этом и заключается трудность.Если бы я только представлял UITableView и NSArray данных, было бы легко сложить мои значения и представить данные.

Однако NSFetchedResultsController, кажется, привязан к извлечению результатов (очевидно), поэтому я предполагаюЯ хочу объединить эти данные, используя выборку, чтобы я мог подключить их прямо к моему табличному представлению, как я делаю с необработанными данными.

Есть предложения?

Спасибо

Ответы [ 4 ]

0 голосов
/ 31 августа 2011

Я сделал это, но в некотором роде уродливо.Но это работает, и мне нужно было заставить его работать быстро ...

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

Я знаю, что это противоречит принципам хранения данных, поскольку позволяет хранить данные, которые можно вычислить, но это было относительно легко сделать.

У меня естьУправляемый объект UsageDay, составляющий большинство данных.Затем у меня есть объект UsageWeek и UsageMonth.

Когда я сохраняю объект UsageDay, начиная с его даты ivar, я вычисляю его weekOfYear и monthOfYear (и year) как для UsageWeek, так и для UsageMonth.

UsageWeek содержит: weekOfYear, year и NSSet объектов UsageDay, которые он содержит UsageMonth содержит: monthOfYear, year и NSSet объектов UsageDay, которые он содержит.

Я могу легко получитьсписок всех UsageWeek, который имеет набор из 7 объектов UsageDay - для которых я вызываю [useWeek valueForKeyPath: @ "creationDaySet. @ sum.value"] - что дает мой итог.Работает нормально.

Не стесняйтесь открыто критиковать этот дизайн - я ожидаю этого !!!

0 голосов
/ 05 августа 2011

(предисловие: в CoreData нет "таблиц")

Если вы модифицируете модель данных для предоставления производного атрибута (он может быть в пользовательском подклассе и не требует моделирования), который определяетнеделю.Возможно weekOfYear.Затем вы захотите сгруппировать разделы по неделям и годам.

0 голосов
/ 26 августа 2011

Я хотел бы взглянуть на создание метода, который использует комбинацию NSCalendar и NSDateComponents, чтобы найти дни, которые принадлежат неделе, а затем вывести дни этой недели, используя NSPredicate с оператором BETWEEN.Это будет проще, если даты в формате NSDate, но если нет, то вы можете легко конвертировать.

Я использовал нечто очень похожее, когда мне приходилось вытаскивать все дни недели из хранилища основных данных дляприложение тайм-карты.

0 голосов
/ 05 августа 2011

моя дорогая, это действительно большое дело. Просто подумайте о множестве разных календарей, которые может иметь пользователь. Но, тем не менее, дата сохраняется как метка времени с 1970 года в секундах. Вы можете попытаться рассчитать с этим coreDataDate % (86400*7) // seconds per day * 7 days.
При расчете по модулю он автоматически группируется по семи дням. Но помните, что есть много случаев, чтобы предвосхитить, например, изменение зимнего / летнего времени в некоторых странах.

...