在底部加载最近的消息,并在“加载旧消息”按钮上加载TableView上的旧消息

时间:2012-02-21 07:53:00

标签: iphone objective-c ios uitableview nsfetchedresultscontroller

我需要按照时间顺序(最新的底部)顺序显示消息,但是需要显示最后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 个答案:

答案 0 :(得分:0)

假设您从数据库中获取数据,然后将其存储在模型中的数组中,那么您可以按照所需的日期顺序对该数组进行排序,并将其存储在模型中,为您的tableview做好准备。

或者在cellForRowAtIndexPath中,而不是返回位置indexRow处的对象,返回数组中位于(arrayLength - indexRow)位置的对象,该对象将以相反的方向返回。