在底部加载最近的消息并放置一个加载旧消息按钮以在 TableView 上加载旧消息
Posted
技术标签:
【中文标题】在底部加载最近的消息并放置一个加载旧消息按钮以在 TableView 上加载旧消息【英文标题】:Loading recent messages at the bottom and putting a Load old message button to load older messages on TableView 【发布时间】:2012-02-21 07:52:59 【问题描述】:我需要按时间顺序(最新在底部)显示消息,但需要显示最后 20 条消息,并且顶部应该有“加载旧”按钮以获取旧消息。
但是对于从核心数据中获取,我们可以指定排序描述符,根据它获取旧的或最近的,问题是它按指定的顺序排序。
即如果我获取最近的消息,它会将该消息放在顶部而不是底部。
有没有办法从最近到旧搜索,但从旧到最近显示(按时间顺序)?
代码:
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES];
按时间顺序给出,但从旧到新搜索。
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO];
按时间倒序排列,但从最近到较旧进行搜索。
我需要按时间顺序排列,根据时间戳从最近到较旧进行搜索。
更多代码:
-(void) loadMoreContent // to load older messages
numberOfCells += 10; //number of rows
int tempNumofCells=(signed)[self.group.messages count]; // total number of messages
if (tempNumofCells-numberOfCells >=0) // number of cells that we are showing is lesser
;
else numberOfCells = tempNumofCells;
//--making a performFetch Request to fill up above cells--
NSError* error;
if (![self.fetchedResultsController performFetch:&error])
exit(-1); // Fail
- (NSFetchedResultsController *)fetchedResultsController
if (_fetchedResultsController != nil)
//change the fetchRequest (fix for a bug result of constant fetched objects from fetchedController)
if (((signed)[self.group.messages count] - numberOfCells) > 0)
[_fetchedResultsController.fetchRequest setFetchOffset:[self.group.messages count] - numberOfCells];
else [_fetchedResultsController.fetchRequest setFetchOffset:0];
return _fetchedResultsController;
.
.
.
...
'setFetchOffset' 起作用了,因为我告诉 fetchedController 从指定索引(在 loadMoreContent() 中设置)获取消息,表的 numberOfRows 再次由 numberOfCells 变量和 fetchedController 的 fetchedResults 决定。
谢谢..
【问题讨论】:
【参考方案1】:假设您从数据库中获取数据,然后将其存储在模型中的一个数组中,那么您可以按照您想要的日期顺序对该数组进行排序,并将其存储在您的模型中以供您的表格视图使用。
或者在您的 cellForRowAtIndexPath
中,而不是返回位置 indexRow
的对象,而是返回数组中位于位置 (arrayLength - indexRow)
的对象,这将在相反的方向返回它。
【讨论】:
也许您想发布一些代码来显示您当时正在做什么,这样我们就不必猜测了? 我没有将元素放入任何数组中,以访问消息 fetchcontroller 的 objectAtIndexPath 函数。我怎样才能得到我需要的排序? 抱歉耽搁了,因为 fetchedResultsController 按时间顺序或逆时间顺序返回排序列表,我需要按时间顺序排序的消息列表,最新消息在底部。 我猜帖子是解释性的。谢谢。 填充 TableView 的代码在哪里(例如 cellForRowAtIndexPath)?以上是关于在底部加载最近的消息并放置一个加载旧消息按钮以在 TableView 上加载旧消息的主要内容,如果未能解决你的问题,请参考以下文章
ReactJS:在superagent ajax请求期间显示带有加载消息的模态