2012-03-19 14 views
0

私は2つの属性、NSDateとブール値を持つエンティティを持っています。コアデータ、カウント、グループby

2つの日付の間のブール値のすべての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、日付

2でソートして、すべてのentetiesを取得)この配列トラフ移動し、日の値とイエスの数を含む辞書で配列を塗りつぶす

3)次に、noeのものを使ってameのことを行い、辞書の配列に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

ありがとうNikita。私は新しいエンティティを作成してしまいました。新しいエンティティを作成するたびに、すべてのはいはいいいえフィールドを増やします。これらのオブジェクトすべてを解析する必要がなくなっているようにも見えます。 –

+0

はい、これは本当に良い方法です) –