【问题标题】:NSFRC core data fetching last recordsNSFRC 核心数据获取最后的记录
【发布时间】:2013-11-07 08:27:29
【问题描述】:

假设我在数据库中有这个:

a,b,c,d,e,f(按日期排序)

我想按日期顺序获取它们,并且只获取每个请求中的最后 2 个

所以我会得到:e,f

问题是,如果我使用 fetchLimit,我会得到第一个有序 fetch 而不是最后一个。每次 NSFRC 更改时,我都可以计算偏移量。我还需要使用 NSFRC。

有人知道更好的解决方案吗?

在 SQL 中,我的查询是:

select * from (select * from tblmessage order by sortfield ASC limit 10) order by sortfield DESC;

这就是我想要的,但对于 IOS: Android SQLite Query - Getting latest 10 records

【问题讨论】:

    标签: ios core-data


    【解决方案1】:

    只需更改排序顺序并根据需要设置获取限制。如果需要,请反转结果。

    fetchRequest.sortDescriptors = 
     @[[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO]];
    fetchRequest.fetchLimit = 2;
    
    NSArray *final result = [[fetchedObjects reverseObjectEnumerator] allObjects];
    

    当然,我看到您的 FRC 问题并没有通过这种方式解决。如果你有一个平面 FRC,即没有部分,你可以只操作你的 fetchedObjects 数组的索引(用 count-1-i 替换每个索引 i

    也许最好的方法是在返回 FRC 之前执行快速获取以确定fetchOffset。我认为使用countForFetchRequest 会非常有效。

    NSInteger count = [self.managedObjectContext countForFetchRequest:request];
    fetchRequest.sortDescriptors = 
      @[[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES]];
    fetchRequest.fetchOffset = count-2; 
    

    如果您遵循延迟加载 FRC 的 Apple Core Data 模板模式,性能应该是无可非议的。

    【讨论】:

    • 我使用了您提到的第一种方法 :) 现在我正在转换为第二种方法。但我想有一个更好的选择。就像在 SQL 中一样,嵌套查询可以轻松解决这个问题。
    • 我最终使用了第二种方法,即每次刷新获取的对象时都进行计数。好消息是,一旦设置了偏移量,即使以后在 DB 中有更多对象,它也会保留。不需要每次有新对象时都加 1 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 2011-03-02
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 2011-03-12
    • 1970-01-01
    相关资源
    最近更新 更多