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

Posted

技术标签:

【中文标题】核心数据 - 获取对象数组的最后一个对象?【英文标题】:Core Data - Fetch last objects of an array of objects? 【发布时间】:2014-02-24 10:57:57 【问题描述】:

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

但是,我只需要谓词中每个 emailId 的最后一个对象(或最后一封电子邮件)。目前,我获取此 fetch 的输出并使用单独的排序来过滤我想要的对象。但是,我想在这个 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],但没有成功。我也找不到任何表明这是可能的文件。不过,我敢肯定,之前有人会尝试过并想听听他们的意见。

【问题讨论】:

我认为您无法处理核心数据。您最好采用返回的集合并使用 @max 谓词。看developer.apple.com/library/ios/documentation/Cocoa/Conceptual/… 我可能离这里很远,但是如果您可以通过说 emails[0] 获得第一条记录,那么最后一条记录不会是 emails[-1]。这似乎适用于多种编程语言。 【参考方案1】:

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

【讨论】:

以上是关于核心数据 - 获取对象数组的最后一个对象?的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSPredicate 获取核心数据对象数组?

Restkit:从核心数据获取到服务器的 POST 对象数组

需要编写一个谓词来搜索核心数据对象数组属性中的日期(在我的例子中是日期数组)

获取数组中对象的值

iOS:核心数据获取

前端向后端传一个json数组对象