NSFRC 核心数据获取最后的记录
Posted
技术标签:
【中文标题】NSFRC 核心数据获取最后的记录【英文标题】:NSFRC core data fetching last records 【发布时间】: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
【问题讨论】:
【参考方案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 :)以上是关于NSFRC 核心数据获取最后的记录的主要内容,如果未能解决你的问题,请参考以下文章