2016-07-13 2 views
0

Есть ли способ запросить NSDate в CoreData. Например, если мне нужен объект с наивысшим значениемNSDate? Я вижу, что NSExpression «max:» принимает только NSNumber.Query max NSDate в основных данных

+0

вы хотите fech объекта с максимальной датой от лица? –

ответ

1

Вы действительно можете задать 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"]); 
    } 
} 

более подробно под кокетливым Managed Objects -> Получение конкретных значений в документации CoreData.

или

Perfomed запрос, заказанные на поле даты DESCENDING и используя setFetchLim Это: 1. Неплохо, но, по крайней мере, это сработало.

0

вы можете получить его с

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"tablename"]; 

fetchRequest.fetchLimit = 1; 
fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"yourDate" ascending:NO]]; 

NSError *error = nil; 

id person = [managedObjectContext executeFetchRequest:fetchRequest error:&error].firstObject; 
0

Вы можете сделать это прямо в SQLite-- не извлекая все, а затем фильтровать результат, и без сложности NSExpression.

Чтобы получить один объект, который имеет максимальную дату, сделать что-то вроде (предполагается, что имя сущности Entity и атрибут Дата timeStamp):

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Event"]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"timeStamp = [email protected]"]; 
fetchRequest.predicate = predicate; 

ли Выборки. Вы получите (не более) один результат, который будет экземпляром с максимальной датой.

Если вы хотите, чтобы получить только дату, а не весь управляемый объект, добавьте это, прежде чем делать выборки:

fetchRequest.resultType = NSDictionaryResultType; 
fetchRequest.propertiesToFetch = @[ @"timeStamp" ]; 
Смежные вопросы