在底部加载最近的消息并放置一个加载旧消息按钮以在 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 上加载旧消息的主要内容,如果未能解决你的问题,请参考以下文章

消息加载时滚动到 UITableView 的底部

ReactJS:在superagent ajax请求期间显示带有加载消息的模态

如何在屏幕底部加载集合视图?

JQuery Mobile 1.5.0 加载消息

Flutter StreamBuilder 在加载时删除旧数据

从 Asset Bundle 加载资源以在 Unity 中进行 Play 资源交付