Получение максимального значения отношения "один ко многим" в CoreData через NSPredicatae

Я создаю приложение timeclock, в котором есть модель ClockPunch NSManagedObject со свойствами, представляющими Clockin и Clockout Punch. Каждый экземпляр ClockPunch имеет отношение с Employee в модели Employees (которая также имеет отношение один-ко-многим с каждым ударом). Я хочу быть в состоянии написать NSPredicate, который даст мне сотрудника с их последним ударом часов. Затем я могу определить, были ли они синхронизированы или нет, по тому, есть ли у них удар удара по времени, чтобы соответствовать. Я не хочу тянуть все удары, а затем сортировать их, потому что на каждого работника может быть по 1000 человек. Что я должен делать?

Моя модель выглядит так

Employees<->>ClockPunches

1 ответ

Решение

Я пробовал что-то очень похожее в последнее время, как это. Я пытался найти регистрацию с максимальной датой.

NSFetchRequest* request = [Registration fetchRequest];
NSExpression *date = [NSExpression expressionForKeyPath:@"time"];

NSExpression *maxDate = [NSExpression expressionForFunction:@"max:"
                                                  arguments:[NSArray arrayWithObject:date]];

NSExpressionDescription *d = [[[NSExpressionDescription alloc] init] autorelease];
[d setName:@"maxTime"];
[d setExpression:maxDate];
[d setExpressionResultType:NSDateAttributeType];
[request setPropertiesToFetch:[NSArray arrayWithObject:d]];

NSError *error = nil;
NSArray *objects = [Registration executeFetchRequest:request];
if (objects == nil) {
    // Handle the error.
} else {
    if (0 < [objects count]) {
        NSLog(@"Maximum date: %@", [[objects objectAtIndex:0] valueForKey:@"type"]);
    }
}

Вы можете найти более подробную информацию на этой странице. https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdFetching.html

Однако часть, которую я до сих пор пропускаю, это как посмотреть только регистрации конкретного сотрудника... Я попытался объединить запрос, задав NSPredicate, но почему-то их нельзя использовать вместе.

ПРИМЕЧАНИЕ: я использую restkit для доступа к coredata, перейдите по ссылке, чтобы получить чистый пример данных ядра (отличается только небольшая часть кода)

Другие вопросы по тегам