how to group by day with core data?

£可爱£侵袭症+ 提交于 2020-06-22 12:17:47

问题


I have a Entity called deal and deal has a property called date which is the time this deal object inserted into the store.

and one day may have several deals.

So I want count some data group by day, I want fetch dayand countofsomething
like:

2013-06-03 3
2013-06-02 4

and I don't want to use sectionPath because it only put deals into section.

I know I can have this done by have another property(type:string) like dayOfTheDate which is like 2013-06-03 in each object.

btw, transient property don't seem to work in this situation

Could you understand what I am looking for?

Comment here so I can provide more detail

Thanks all of you.


回答1:


Sample of how I did it when I counted number of same notes

NSEntityDescription* entity = [NSEntityDescription entityForName:@"Assets"
                                          inManagedObjectContext:[appDelegate managedObjectContext]];
NSAttributeDescription* statusDesc = [entity.attributesByName objectForKey:@"notes"];
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath: @"assetUrl"]; // Does not really matter
NSExpression *countExpression = [NSExpression expressionForFunction: @"count:"
                                                          arguments: [NSArray arrayWithObject:keyPathExpression]];
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName: @"count"];
[expressionDescription setExpression: countExpression];
[expressionDescription setExpressionResultType: NSInteger32AttributeType];
[searchFetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:statusDesc,expressionDescription, nil]];
[searchFetchRequest setPropertiesToGroupBy:[NSArray arrayWithObject:statusDesc]];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"timestamp" ascending:NO];
[searchFetchRequest setSortDescriptors:@[sortDescriptor]];
[searchFetchRequest setFetchLimit:10];
NSPredicate *query = [NSPredicate predicateWithFormat:@"notes contains[cd] %@",_txtCameraNote.text];
[searchFetchRequest setPredicate:query];
[searchFetchRequest setResultType:NSDictionaryResultType];
NSArray *fetchedObjects = [appContext executeFetchRequest:searchFetchRequest error:nil];

fetchedObjects would be something like this.

({
    count = 1;
    notes = "glenny and me";
},
{
    count = 6;
    notes = macair;
})


来源:https://stackoverflow.com/questions/16896182/how-to-group-by-day-with-core-data

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!