2012-03-19 2 views
0

У меня есть объект с двумя атрибутами, NSDate и логическим значением. (это будет большая «таблица»)Основные данные, счет и группа по

Мне нужно посчитать все значения YES и NO для булева между двумя датами, сгруппированными по дням. Как я могу это сделать?

The result I'm looking for is 
{ 
totalYes = 10, 
totalNo = 5, 
date = dd-mm-yyyy 
}, 
{ 
totalYes = 15, 
totalNo = 3, 
date = dd-mm-yyyy 
}, 

и т.д.

Благодаря

ответ

1

Вы можете попробовать этот подход:

1) Получить все enteties с YES, отсортированные по дате

2) Перейти корыто этот массив и заполнение массива со словарями с дневным значением и числом дат

3) Затем сделайте ae вещь с noe's, добавив количество no к этому набору словарей.

NSFetchRequest *request = [[NSFetchRequest alloc]init]; 
request.entity = [NSEntityDescription entityForName:@"Day" inManagedObjectContext:context]; 
request.predicate = [NSPredicate predicateWithFormat:@"yesorno = %@",YES]; 

NSError *error = nil; 
request.sortDescriptors =[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]]; 
//Here you get all the enteties with YES,sorted by date 

NSArray *days = [context executeFetchRequest:request error:&error]; 
NSMutableArray *arrayOfDates = [NSMutableArray array]; 
int firstDay = [[[NSCalendar currentCalendar]components:NSDayCalendarUnit fromDate:[[days objectAtIndex:0]date]]day]; 
//Add the first day dictionary 
[arrayOfDates addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:[[days objectAtIndex:0]date],@"Day", nil]; 

int numberOfYes = 0; 
int dayNumber = 0; 
for(NSManagedObject *day in days) 
{ 
    if([[[NSCalendar currentCalendar]components:NSDayCalendarUnit fromDate:[day date]]day]>firstDay) 
    { 
     //save number of yeses for the previous day,because we are done with it 
     [[arrayOfDates objectAtIndex:dayNumber]setValue:[NSNumber numberWithInt:numberOfYes] forKey:@"NumberOfYes"]; 
     numberOfYes = 1; 
     dayNumber++; 
     firstDay = [[[NSCalendar currentCalendar]components:NSDayCalendarUnit fromDate:[day date]]day];//date with new day 
     [arrayOfDates addObject:[NSMutableDictionary dictionaryWithObjectsAndKeys:[day date],@"Day", nil];//Add this day dictionary to array 

    }else 
     { 
      numberOfYes++; 
     } 

} 
     //And somrthing similar to No 
+0

Спасибо Никита. Я закончил создание нового объекта, в котором я увеличиваю все да без полей каждый раз, когда добавляю новый. Кажется, быстрее и не нужно разбирать все эти объекты. –

+0

Да, это действительно лучший способ) –

Смежные вопросы