Ios 获取最后记录的NSFRC核心数据

Ios 获取最后记录的NSFRC核心数据,ios,core-data,Ios,Core Data,假设在DB中有这样一个值: 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) or

假设在DB中有这样一个值:

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:

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

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

NSArray *final result = [[fetchedObjects reverseObjectEnumerator] allObjects];
当然,我看到你的财务报告准则问题并不是这样解决的。如果您有一个平面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数据模板模式,性能应该无可非议。

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

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数据模板模式,性能应该无可非议。

我使用了您提到的第一种方法:)现在我转换到第二种。但是我想有更好的选择。就像在SQL中一样,嵌套查询可以很容易地解决这个问题。我最终使用了第二种方法,每次刷新获取的对象都会进行计数。好处是,一旦设置了偏移量,即使以后数据库中有更多的对象,它也会保持不变。哟你不需要每次有新对象时都加1:)我使用了你提到的第一种方法:)现在我转换到第二种。但我想有一个更好的选择。与SQL一样,嵌套查询可以很容易地解决这个问题。我最终使用了第二种方法,即每次刷新获取的对象时都要进行计数。好的是,一旦设置了偏移量,即使以后DB中有更多的对象,它也会保持不变。不必每次有新对象时都添加1:)