假设我在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
答案 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模板模式,那么性能应该无可非议。