目前,我有一个Tableview,它在加载时向Core-Data发送请求,并获取较新消息的前10条消息。

// Initialize Fetch Request
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Chat"];

    // Add Sort Descriptors
    fetchRequest.fetchLimit = 10;
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"room = %@", _roomid];
    [fetchRequest setSortDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"date_message" ascending:NO]]]; // YES;

    // Initialize Fetched Results Controller
    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];

    _fetchedResultsController.delegate = self;

    // Perform Fetch
    NSError *error = nil;
    [self.fetchedResultsController performFetch:&error];

    if (error) {
        NSLog(@"Unable to perform fetch.");
        NSLog(@"%@, %@", error, error.localizedDescription);
    }

在我打电话给他们之后。 消息正确显示在下面。 但是,当我加载(按需获取较旧的消息)时,会使用以下内容。

- (void)fetchOldMessages {

    [self.fetchedResultsController.fetchRequest setSortDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"date_message" ascending:NO]]];
    _fetchedResultsController.fetchRequest.fetchLimit +=10;


    NSError *error = nil;
    [self.fetchedResultsController performFetch:&error];

    if (error) {
        NSLog(@"Unable to perform fetch.");
        NSLog(@"%@, %@", error, error.localizedDescription);
    }

    [self.tableView reloadData];

}

问题是旧消息现在显示在下面而不是新消息的上面。 新插入的消息也显示在tableView的顶部而不是底部。

这是我的IndexPath:

- (UITableViewCell*)tableView:(UITableView*)table cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
                Chat *messageInfo = [self.fetchedResultsController objectAtIndexPath:indexPath];

                NSString *CellIdentifier = @"fromMe";
                FromMeTableViewCell *cell = [table dequeueReusableCellWithIdentifier:CellIdentifier];

                cell.message_me.clipsToBounds = YES;
                cell.message_me.layer.cornerRadius = 15;
                cell.message_me.textContainerInset = UIEdgeInsetsMake(8.0, 8.0, 8.0, 8.0);
                cell.message_me.text = messageInfo.message;
                cell.message_date_me.text = [NSString stringWithFormat:@"%@", messageInfo.date_message];

                cell.avatar_message_me.clipsToBounds = YES;
                cell.avatar_message_me.layer.cornerRadius = cell.avatar_message_me.frame.size.width / 2;
                cell.avatar_message_me.image = user_images[@"me"];
                cell.message_me.backgroundColor = [UIColor colorWithRed:0.098 green:0.737 blue:0.611 alpha:1];
                cell.message_me.textColor = [UIColor whiteColor]; //[UIColor whiteColor];

                // Date Settings
                NSDate *today = [[NSDate alloc]init];
                NSDate *message_date = messageInfo.date_message;

                NSDateFormatter  *formatDate = [[NSDateFormatter alloc]init];
                [formatDate setDateFormat:@"yyyy-MM-dd"];

                NSString *today_string = [formatDate stringFromDate:today];
                NSString *message_date_string = [formatDate stringFromDate:message_date];

                // Make Date validation case is older display full date
                if([today_string isEqualToString:message_date_string]){

                    NSDateFormatter *timeformat = [[NSDateFormatter alloc] init];
                    [timeformat setDateFormat:@"hh:mm a"];

                    NSDate *message_date = messageInfo.date_message;
                    NSString *string_date = [timeformat stringFromDate:message_date];
                    cell.message_date_me.text = [NSString stringWithFormat:@"Today at %@",[NSString stringWithFormat:@"%@",string_date]];

                }
                else {
                    NSDateFormatter *timeformat = [[NSDateFormatter alloc] init];
                    [timeformat setDateFormat:@"EEEE d hh:mm a"];

                    NSDate *message_date = messageInfo.date_message;
                    NSString *string_date = [timeformat stringFromDate:message_date];
                    cell.message_date_me.text = [NSString stringWithFormat:@"%@",[NSString stringWithFormat:@"%@",string_date]];
                }

                return cell;


}

这是第一次加载时显示5条消息,但最后一条消息应该关闭,而不是如DATE所示

当我加载更多数据时,它以从新到旧的正确顺序显示消息,但问题是我想在下面显示较新的消息,在上面显示较旧的消息。

当我加载更多数据时,它以从新到旧的正确顺序显示消息,但问题是我想在下面显示较新的消息,在上面显示较旧的消息。

#1楼 票数:0

使您的提取请求控制器将ASCENDING排序为YES

[self.fetchedResultsController.fetchRequest setSortDescriptors:@ [[NSSortDescriptor sortDescriptorWithKey:@“ date_message”升序:是]]]];

  ask by Eddwin Paz translate from so

未解决问题?本站智能推荐:

1回复

在核心数据中更改托管对象模型的属性值时崩溃

我有一个表视图控制器,它使用获取的结果控制器为每一行获取项目。 当选择一行时,它将推送一个新的视图控制器来编辑该特定的受管对象模型-当我编辑并尝试保存时,我得到以下内容。 原因是什么? 谢谢 。
1回复

使用NSFetchedResultsController时如何在每节中获取一条记录

我在使用Core Data的iOS应用程序上工作,我想使用UITableView显示实体。 为此,我正在使用NSFetchedResultsController。 我要实现的目的是在其部分中显示每个记录。 基本上我想每节1行。 我正在努力的方法是: 和 因为在计算
1回复

除了加载行的子集以外,使用NSFetchedResultsController有什么好处?

我们使用NSFetchedResultsController仅加载行的子集,而不加载表中的完整数据。 使用它有任何未知的好处吗? 谢谢。
1回复

用于更改NSFetchedResultsController的获取请求和重新加载表数据的配方

从apple doc 修改获取请求我看到可以更改NSFetchRequest的NSFetchedResultsController 。 步骤很容易设置。 在调用performFetch:我认为需要在表视图上调用reloadData 。 如何进行这样的通话? 阅读一些stackov
1回复

TableView不显示任何数据(CoreData)-应用程序崩溃

我无法从数据库中读取数据。 我有一个带有tabbarcontroller的应用程序。 在第一个选项卡中,iphone相机从条形码拍摄一张照片,然后将结果发送到另一个视图(CameraReturnDetailViewController)。 在CameraReturnDetailViewCo
1回复

使用NSFetchedResultsController在分区表视图中排序和显示数据

我以以下方式拥有数据库。 ProductionHouse <---->电影<----> MovieType 每个ProductionHouse都有与其关联的多部电影。 我正在使用NSFetchedResultsController填充分区表视图。 每当我选择一
2回复

NSFetchedResultsController,使用外部条件重新获取数据

我有一个NSFetchedResultsController来获取UITableView的数据。 在创建中的NSFetchedResultsController创建一个NSPredicate与外部条件对数据进行过滤。 重新获取数据的正确方法是什么? 只是取消我的__fetchedResul
1回复

CoreData:一对多关系显示问题

我意识到这很漫长,但是我目前正在从事我的第一个CoreData项目,尽管阅读了所有资源,但我发现它并没有全部陷入。 到目前为止,我已经保存了它并保持了所有正常状态,但是我似乎无法正常运行该关系。 我有一个显示Exersize类别的表视图,该视图移动到显示其关联的Exersize(一对多)的表