Используя приведенный ниже код, я получаю массив электронных писем из Core Data. Я передаю массив emailId в качестве предиката для выборки, и он возвращает все электронные письма для каждого из emailId.
Однако мне нужен только последний объект (или последнее электронное письмо) каждого из идентификаторов электронной почты в предикате. В настоящее время я беру результат этой выборки и использую отдельную сортировку для фильтрации нужных мне объектов. Тем не менее, я бы хотел, чтобы фильтрация была в самой выборке. Есть ли способ сделать это?
- (NSFetchedResultsController *)getLatestEmail:(NSArray *)emailId
{
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"email_id IN %@", emailId];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Emails"
inManagedObjectContext:self.context];
[fetchRequest setEntity:entity];
[fetchRequest setPredicate:predicate];
[fetchRequest setFetchBatchSize:20];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"last_update_timestamp" ascending:NO];
NSArray *sortDescriptors = @[sortDescriptor];
[fetchRequest setSortDescriptors:sortDescriptors];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:self.context
sectionNameKeyPath:nil
cacheName:@"Master"];
aFetchedResultsController.delegate = self;
self.emailFetchedResultsController = aFetchedResultsController;
NSError *error = nil;
if (![self.emailFetchedResultsController performFetch:&error])
{
NSLog(@"getLatestEmail failed %@, %@", error, [error userInfo]);
}
NSArray *emails = [[self.context executeFetchRequest:fetchRequest error:&error] mutableCopy];
return _emailFetchedResultsController;
}
Я пытался добавить .lastobject
к [[self.context executeFetchRequest:fetchRequest error:&error] mutableCopy]
, но не получилось. Я также не смог найти никакой документации, которая предполагает, что это возможно. Тем не менее, я уверен, что кто-то попробовал это раньше и хотел бы услышать их мнение.