2015-05-27 5 views
0

Hi, Есть ли способ применить свойство Groupby в основных данных.GroupBy Date in Core data

Что я хочу для

У меня есть несколько записей говорят 45 различных дат и времени, которая содержит счетчик числа шагов пациент ходьбы.

Скажите 15 записей с 27 мая по разные стороны времени. 15 записей с 26 мая в разное время. 15 записей с 25 мая в разное время.

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

То, что я сделал до сих пор

NSFetchRequest *fetchingRequest = [[NSFetchRequest alloc]init]; 
NSEntityDescription *logsDescription = [NSEntityDescription entityForName:MISFIT_ACTIVITY_LOG inManagedObjectContext:[PAPersistanceManager sharedInstance].mainManagedObjectContext]; 
[fetchingRequest setEntity:logsDescription]; 

NSAttributeDescription* timeStamp = [logsDescription.attributesByName objectForKey:@"timestamp"]; 
NSAttributeDescription* logId = [logsDescription.attributesByName objectForKey:@"activityLogId"]; 
NSAttributeDescription* steps = [logsDescription.attributesByName objectForKey:@"steps"]; 
NSAttributeDescription* syncStatus = [logsDescription.attributesByName objectForKey:@"syncStatus"]; 

[fetchingRequest setPropertiesToGroupBy:[NSArray arrayWithObjects:timeStamp,logId,steps,syncStatus,nil]]; 

NSError *fetchError; 
[fetchingRequest setPropertiesToFetch:[NSArray arrayWithObjects:@"steps" nil]]; 
[fetchingRequest setResultType:NSDictionaryResultType]; 
//[fetchRequest setResultType:NSDictionaryResultType]; 
NSArray *fetchResult = [[PAPersistanceManager sharedInstance].mainManagedObjectContext executeFetchRequest:fetchingRequest error:&fetchError]; 

Результат

<_PFArray 0x169821f0>(
{ 
    steps = 4; 
}, 
{ 
    steps = 60; 
}, 
{ 
    steps = 110; 
}, 
{ 
    steps = 348; 
}, 
{ 
    steps = 66; 
}, 
{ 
    steps = 104; 
} 
) 

Все значения от 27 мая Но это возвращает меня 6 различных объектов, вместо того, чтобы давать мне суммы все шаги.

Есть ли способ сделать это иначе, чем Цитирование через все записи и с использованием сравнения?

Спасибо.

+0

Считаете ли вы, что вам нужно использовать NSExpression и NSExpressionDescription, я не совсем понятен в вашем случае использования? – Sandeep

ответ

0

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

Так сказать, если у вас есть 3 даты Май 26 2015, 27 мая 2015 и (ради него) 28 июня 2014. Ваши представленные в виде строки даты будут (в порядке возрастания):

  • 2014-06-28
  • 2015-05-26
  • 2015-05-27

Вы можете использовать этот ключ в качестве ключа секции, используя NSFetchedResultsController. Это даст вам эквивалентную функциональность (типа) MySQL GROUP BY.

Надеюсь, это поможет!

+0

Спасибо Дэнни Браво за ваш ответ. Вы хотите внести изменения в DataModel? –