NSFRC核心数据获取最后记录

时间:2013-11-07 08:27:29

标签: ios core-data

假设我在DB中有这个:

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 Query - Getting latest 10 records

1 个答案:

答案 0 :(得分:1)

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

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

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

当然,我看到你的FRC问题没有通过这种方式解决。如果你有一个平坦的FRC,即没有部分,你可以操纵fetchedObjects数组的索引(用i替换每个索引count-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模板模式,那么性能应该无可非议。