2012-03-19 44 views
0

我有一個實體有2個屬性,一個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)獲取所有YES的enteties,按日期

2排序)走線槽這個數組和用日期值和字節數填充字典列表

3)然後,用noe的方法做這件事,給這個字典數組添加數字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

謝謝尼基塔。我最終創建了一個新的實體,在這個實體中,我每增加一個新的實體,都會增加所有是的。似乎更快也不必解析所有這些對象。 – 2012-03-26 13:59:06

+0

是的,這真是一個更好的方法) – 2012-03-26 14:25:13