Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Core Data: trying to find minimum date for an attribute in an entity

I'm trying to find the oldest date in a particular attribute in Core Data. I've found an example in the Core Data Programming Guide that purports to do exactly that, but keep getting an unrecognized selected error when I run it.

My code (with only minimal changes from the Apple Example):

NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Session" inManagedObjectContext: ctx];
[request setEntity:entity];

// Specify that the request should return dictionaries.
[request setResultType:NSDictionaryResultType];

// Create an expression for the key path.
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"startedAt"];

// Create an expression to represent the minimum value at the key path 'creationDate'
NSExpression *minExpression = [NSExpression expressionForFunction:@"min:" arguments:[NSArray arrayWithObject:keyPathExpression]];

// Create an expression description using the minExpression and returning a date.
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];

// The name is the key that will be used in the dictionary for the return value.
[expressionDescription setName:@"minDate"];
[expressionDescription setExpression:minExpression];
[expressionDescription setExpressionResultType:NSDateAttributeType];

// Set the request's properties to fetch just the property represented by the expressions.
[request setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];

// Execute the fetch.
NSError *error;
NSArray *objects = [ctx executeFetchRequest:request error:&error];

And the error:

-[NSCalendarDate count]: unrecognized selector sent to instance ...

Which is strange given that 1) NSCalendarDate is deprecated and 2) I'm definitely not calling count.

Any help would be most appreciated!

like image 877
AndrewO Avatar asked May 10 '10 21:05

AndrewO


1 Answers

Why not just add a sort descriptor to sort by startedDate ascending, and then only have the fetch request return 1 object?

like image 128
Dave DeLong Avatar answered Sep 18 '22 15:09

Dave DeLong