iOS聊天下拉刷新聊天记录的实现

1. 想法

最近在开发一个社交类app,要实现类似微信那种下拉刷新聊天记录的功能。

一般有两种实现方式:

1. 直接fetch一个entity的所有数据然后在内存中做filter,就是把所有聊天记录先读出来然后每次加载10条。

缺点:浪费内存   优点:速度快

2. 使用predicate,每次访问数据库读取10条数据显示。

缺点:速度比较慢,会有卡顿现象 优点:内存少

2. 实现

因为聊天记录非常多,一次读取太浪费内存了,决定还是每次下拉就从数据库读取10条显示。

 1 -(NSArray *)queryMessageResult
 2 {
 3     NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:NSStringFromClass([HistoryMessageLog class])];
 4     NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"time" ascending:NO];
 5     //把排序和分组规则添加到请求中,这样聊天记录根据时间倒序,最新的记录在前面
 6     [request setSortDescriptors:@[sortDescriptor]];
 7
 8     [request setFetchLimit:10];
 9     [request setFetchOffset:self.FetchOffset];
10
11     NSError *error;
12     NSArray *messageArray = [[(id)[UIApplication sharedApplication].delegate managedObjectContext] executeFetchRequest:request error:&error];
13     if ([messageArray count]) {
14        //每次都要更新游标
15         self.FetchOffset += [messageArray count];
16     }
17     return messageArray;
18
19 }

这样每次都能读取10条记录出去,这个实现比较容易,做复杂了可以根据时间来读取一定的条数。

3. 代码

聊天的功能也做的差不多了,不过还有一些小问题,下面是截图

如果有感兴趣的朋友可以下载代码去看看,然后一起交流。

github地址:https://github.com/stevenxiaoyang/Chat.git

时间: 2024-10-13 15:35:26

iOS聊天下拉刷新聊天记录的实现的相关文章

Android 聊天表情输入、表情翻页带效果、下拉刷新聊天记录

经过一个星期的折腾,终于做完了这个Android 聊天表情输入.表情翻页带效果.下拉刷新聊天记录.这只是一个单独聊天表情的输入,以及聊天的效果实现.因为我没有写服务器,所以没有双方聊天的效果.主要是聊天中表情的选择,发送.表情翻页带有不同的效果.我在主要代码中都写了注释.下面看代码实现.附上本文源码,代码较多. 下载地址:点击 一.先看实现的效果图 二.调用接口以及设置MainActivity package com.example.activity; import java.util.Arra

IOS 开发下拉刷新和上拉加载更多

IOS 开发下拉刷新和上拉加载更多 简介 1.常用的下拉刷新的实现方式 (1)UIRefreshControl (2)EGOTTableViewrefresh (3)AH3DPullRefresh (4)MJRefresh (5)自己实现 2.AH3DPullRefresh实现下拉刷新和上拉下载的步骤 添加UIScrollView+AH3DPullRefresh.h 和UIScrollView+AH3DPullRefresh.m两个文件,由此可知,它是基于UIScrollView的方法. 在bu

IOS UIWebView 下拉刷新功能的简单实现

1.运行效果图 2.swift 代码的实现 import UIKit class RefreshWebViewController: UIViewController,UIScrollViewDelegate,UIWebViewDelegate{ @IBOutlet weak var webView: UIWebView! //刷新控件view private var header:UIView! //下拉到50时松开刷新 private let pullHeight:CGFloat=50 //

ios实现下拉刷新,上拉加载

1.自定义cell //#import "EnjoyListModel.h" @protocol EnjoyCollectionCellOfViewDelegate <NSObject> - (void)freeButtonDelegateAction:(UIButton *)sender; @end @interface EnjoyCollectionCellOfView : UICollectionViewCell @property (nonatomic,strong

iOS MJRefresh下拉刷新 上拉加载(可添加gif图版) 小结

1.首先去github上下载最新版 MJ刷新库 下载MJ链接 2.tableVIew中加入相关代码 _tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, MCAPPWidth, MCAPPHeight - 64)]; _tableView.backgroundColor = myClearColor; _tableView.separatorStyle = UITableViewCellSeparatorStyleNon

iOS表示图下拉刷新控件

UIRefreshControl用的是这个控件.UITableViewController中有refreshControl这个属性. 表格的初始化和数据设置与常规一致. 1:初始化UIRefreshControl控件,并绑定下拉事件 //添加下拉刷新控件 UIRefreshControl *rc=[[UIRefreshControl alloc] init]; rc.attributedTitle = [[NSAttributedString alloc] initWithString:@"下拉

ios EGORefreshTableHeaderView下拉刷新

第一步  将EGORefreshTableHeaderView.h.EGORefreshTableHeaderView.m两个文件,以及Enormego提供的那一套图片包拖进你的工程里. 第二步 RootViewController.h添加相应的元素: #import "EGORefreshTableHeaderView.h" @interface RootViewController : UIViewController  <UITableViewDataSource,UITa

iOS下拉刷新

在iOS开发中,我们经常要用到下拉刷新来加载新的数据.iOS原生就带有该方法,下面就iOS自带的下拉刷新方法来简单操作. 1.在TableView里,一打开软件,我们就调用下拉刷新事件. - (void)viewDidLoad { [super viewDidLoad]; // 集成刷新控件 [self setupRefresh]; } /** * 集成下拉刷新 */ -(void)setupRefresh { //1.添加刷新控件 UIRefreshControl *control=[[UIR

iOS学习之路--下拉刷新和上拉加载更多

iOS学习之路--下拉刷新和上拉加载更多 简介 本文中笔者将和大家分享应用app中常用到的表单内容的下拉刷新和上拉加载更多的功能实现的方法. 内容 1.有哪些实现方法与各方法的优劣 使用过美团,大众点评的朋友们应该有注意到,当你向上滑动表单的时候会有更多的店铺加载进你的表单中,而当你下滑表单顶的时候,则会刷新表单的内容并从网络上获取最新的信息.通过下拉刷新和上拉加载更多的功能,使app可以获取更多用户想要的信息和获取最新的信息.那么这种功能如何实现呢,还请跟着笔者继续往下看. 目前来说,主要的实