1

所以让我们假设我在数据库中有这个:

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

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

所以我会得到:e,f

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

有谁知道更好的解决方案?

在 SQL 中,我的查询是:

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

这就是我想要的,但对于 IOS: Android SQLite 查询 - 获取最新的 10 条记录

4

1 回答 1

1

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

fetchRequest.sortDescriptors = 
 @[[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO]];
fetchRequest.fetchLimit = 2;

NSArray *final result = [[fetchedObjects reverseObjectEnumerator] allObjects];

当然,我看到你的 FRC 问题不是这样解决的。如果您有一个平面 FRC,即没有部分,您可以只操作fetchedObjects数组的索引(将每个索引替换icount-1-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 模板模式,性能应该是无可非议的。

于 2013-11-07T08:51:35.683 回答