Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to group by day with core data?

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.

like image 709
Puttin Avatar asked Jun 03 '13 11:06

Puttin


People also ask

What is stack in core data?

As I mentioned earlier, the Core Data stack is the heart of Core Data. It's a collection of objects that make Core Data tick. The key objects of the stack are the managed object model, the persistent store coordinator, and one or more managed object contexts.

When should I use Core Data?

Use Core Data to save your application's permanent data for offline use, to cache temporary data, and to add undo functionality to your app on a single device. To sync data across multiple devices in a single iCloud account, Core Data automatically mirrors your schema to a CloudKit container.


1 Answers

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;
})
like image 165
Underdog Avatar answered Oct 16 '22 23:10

Underdog