核心数据 - 获取对象数组的最后一个对象?

时间:2014-02-24 10:57:58

标签: ios objective-c core-data nsfetchrequest

使用下面的代码,我从Core Data获取一系列电子邮件。我将一个emailId数组作为谓词传递给fetch,它会返回每个emailIds的所有电子邮件。

但是,我只需要谓词中每个emailIds的最后一个对象(或最后一封电子邮件)。目前,我获取此获取的输出并使用单独的排序来过滤我想要的对象。但是,我想在这个fetch中进行过滤。有没有办法做到这一点?

- (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],但无效。我也找不到任何表明这是可能的文件。但是,我确信,有人会先尝试过,并希望听取他们的意见。

1 个答案:

答案 0 :(得分:0)

反转排序描述符,然后将批量大小设置为1,将偏移量设置为零。