CoreData谓词最新存储日期

Pet*_*isu 3 cocoa core-data

我需要从coredata获取最新日期

我找到了一个方法

NSSortDescriptor * sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];

[fetchRequest setFetchLimit:1];
Run Code Online (Sandbox Code Playgroud)

所以按日期排序然后选择第一个

但是这不能做得更好吗?这种方法看起来像是一种蛮力

sort是nlogn,但是对max的简单搜索是n

Dan*_*ert 9

您实际上可以向SQL询问该值,而不是具有该值的对象:

NSExpression *date = [NSExpression expressionForKeyPath:@"date"];
NSExpression *maxDate = [NSExpression expressionForFunction:@"max:"
    arguments:[NSArray arrayWithObject:maxDate]];
NSExpressionDescription *d = [[[NSExpressionDescription alloc] init] autorelease];
[d setName:@"maxDate"];
[d setExpression:maxSalaryExpression];
[d setExpressionResultType:NSDateAttributeType];

[request setPropertiesToFetch:[NSArray arrayWithObject:d]];

NSError *error = nil;
NSArray *objects = [managedObjectContext executeFetchRequest:request error:&error];
if (objects == nil) {
    // Handle the error.
} else {
    if (0 < [objects count]) {
        NSLog(@"Maximum date: %@", [[objects objectAtIndex:0] valueForKey:@"maxDate"]);
    }
}
Run Code Online (Sandbox Code Playgroud)

在CoreData文档中获取托管对象 - > 获取特定值下将对此进行更详细的描述.