亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

xmpp整理筆記:聊天信息的發送與顯示

2019-11-14 19:30:04
字體:
來源:轉載
供稿:網友

任何一個信息的發送都需要關注兩個部分,信息的發出,和信息在界面中的顯示

往期回顧:

xmpp整理筆記:環境的快速配置(附安裝包)  http://www.49028c.com/dsxniubility/p/4304570.html

xmpp整理筆記:xmppFramework框架的導入和介紹  http://www.49028c.com/dsxniubility/p/4307057.html

xmpp整理筆記:用戶網絡連接及好友管理 http://www.49028c.com/dsxniubility/p/4307066.html

需要注意一點:

聊天界面輸入框并不是textField而是textView,因為textView可以控制多行信息間的上下滾動編輯,如果微信下面的聊天框用的是普通的textField你可以想象會出現什么情況。

用模擬器程序和小鴨子聊天效果圖如下:

如果你不是在董鉑然博客園看到本文 請點擊查看原文

 

一。信息的發送

首先要有一個結果調度器

這是通過coredata從SQLlite取數據的必要操作。所有代碼寫在這個懶加載中

- (NSFetchedResultsController *)fetchedResultsController {    // 推薦寫法,減少嵌套的層次    if (_fetchedResultsController != nil) {        return _fetchedResultsController;    }        // 先確定需要用到哪個實體    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"XMPPMessageArchiving_Message_CoreDataObject"];        // 排序    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"timestamp" ascending:YES];    request.sortDescriptors = @[sort];        // 每一個聊天界面,只關心聊天對象的消息    request.PRedicate = [NSPredicate predicateWithFormat:@"bareJidStr = %@", self.chatJID.bare];        // 從自己寫的工具類里的屬性中得到上下文    NSManagedObjectContext *ctx = [SXXMPPTools sharedXMPPTools].xmppMessageArchivingCoreDataStorage.mainThreadManagedObjectContext;        // 實例化,里面要填上上面的各種參數    _fetchedResultsController = [[NSFetchedResultsController alloc]       initWithFetchRequest:request managedObjectContext:ctx sectionNameKeyPath:nil cacheName:nil];    _fetchedResultsController.delegate = self;        return _fetchedResultsController;}

 

寫完了結果調度器之后要切記在viewdidload頁面首次加載中加上一句,否則不干活

// 查詢數據    [self.fetchedResultsController performFetch:NULL];

 

發送出消息 

因為textView里面沒有類似textField的shouldReturn的方法 直接發送信息

所以只能對textView的《代理方法之文本改變方法》 稍加處理達到文本發送的目的

#pragma mark - ******************** textView代理方法- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text{    // 判斷按下的是不是回車鍵。    if ([text isEqualToString:@"/n"]) {                // 自定義的信息發送方法,傳入字符串直接發出去。        [self sendMessage:textView.text];                self.textView.text = nil;                return NO;    }    return YES;}

 在輸入時如果按下回車鍵那觸發代理方法傳入的這個字符就是"/n" 就會調用自己寫的 這個sendMessage方法,傳入一個字符串直接發出去。

 

這個方法內部把傳入的文本先addBody 再用自己手寫的單例類的xmpp流 發出去。

#pragma mark - ******************** 發送消息方法/** 發送信息 */- (void)sendMessage:(NSString *)message{    XMPPMessage *msg = [XMPPMessage messageWithType:@"chat" to:self.chatJID];        [msg addBody:message];        [[SXXMPPTools sharedXMPPTools].xmppStream sendElement:msg];}

 

二。信息在tableView中的顯示

是在tableView的數據源方法中,先從數據庫中取出當前的信息,再判斷是發出去的還是接收的。取到不同的可重用標識符,然后賦值

    // 取出當前行的消息    XMPPMessageArchiving_Message_CoreDataObject *message = [self.fetchedResultsController objectAtIndexPath:indexPath];// 判斷是發出消息還是接收消息    NSString *ID = ([message.outgoing intValue] == 1) ? @"SendCell" : @"ReciveCell" ;    SXChatCell *cell = [tableview dequeueReusableCellWithIdentifier:ID];    cell.messageLabel.text = message.body;

 其中sx開的的類名都是我自定義的類,里面都是常規寫法。

 

關于上面提到的工具類SXXmppTools里 這個模塊需要用到得屬性和方法有

/** xmpp流 */@property(nonatomic,strong,readonly) XMPPStream * xmppStream;/** 消息歸檔 */@property (nonatomic, strong, readonly) XMPPMessageArchiving *xmppMessageArchiving;/** 消息歸檔存儲 */@property (nonatomic, strong, readonly) XMPPMessageArchivingCoreDataStorage *xmppMessageArchivingCoreDataStorage;+ (instancetype)sharedXMPPTools;

 

這里有一點需要注意,

因為默認情況下你一進入一位好友的聊天頁面,你和所有好友的聊天記錄都會顯示。因為都是存在同一個數據表里的啊,因此需要做一層過濾,就是懶加載中的這行代碼

// 每一個聊天界面,只關心聊天對象的消息    request.predicate = [NSPredicate predicateWithFormat:@"bareJidStr = %@", self.chatJID.bare];

 如果你不是在董鉑然博客園看到本文 請點擊查看原文

正在整理音頻文件和圖片文件的發送方法,有興趣的可以關注我。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久亚洲影院| 欧美孕妇孕交黑巨大网站| 色狠狠久久aa北条麻妃| 日韩不卡中文字幕| 欧美在线视频网| 欧美激情按摩在线| 国产精品视频最多的网站| 久久在线精品视频| 日韩电影第一页| 在线观看日韩视频| 久久综合88中文色鬼| 欧美激情视频在线免费观看 欧美视频免费一| 欧美亚洲视频在线看网址| 国产欧美精品久久久| 中文字幕日韩av电影| 欧美日韩国产精品一区| 欧美亚洲另类制服自拍| 欧美亚洲国产精品| 国产精品久久9| 亚洲国产精品999| 国产精品欧美日韩一区二区| 国产一区二区三区三区在线观看| 国产成人精品优优av| 亚洲欧美国产制服动漫| 97精品国产97久久久久久| 欧美电影在线观看网站| 亚洲第一av在线| 欧美福利在线观看| 成人黄色av免费在线观看| 92裸体在线视频网站| 日韩av电影在线播放| 这里只有精品视频| 欧美午夜无遮挡| 日韩在线观看你懂的| 国产成人在线播放| 亚洲成人黄色网址| 国产一区二区三区高清在线观看| 国产精品女主播| 中文字幕少妇一区二区三区| 91av在线影院| 久久精品国产成人| 亚洲精品v欧美精品v日韩精品| 欲色天天网综合久久| 亚洲欧美日韩中文在线制服| 亚洲成人精品视频在线观看| 欧美精品福利在线| 成人激情视频在线播放| 日韩电影中文字幕在线| 欧美成人午夜视频| 日韩欧美精品网站| 深夜精品寂寞黄网站在线观看| 日韩中文字幕精品| 成人精品福利视频| 91在线视频一区| 欧美亚洲成人精品| 国产成人亚洲综合| 精品高清一区二区三区| 亚洲欧洲在线视频| 中文字幕v亚洲ⅴv天堂| 久久精品一偷一偷国产| 欧美性极品xxxx娇小| 亚洲精品中文字| 国产精品欧美日韩一区二区| 黑人狂躁日本妞一区二区三区| 久久久免费高清电视剧观看| 成人h片在线播放免费网站| 美女福利精品视频| 亚洲欧美另类自拍| 久久五月天色综合| 欧美国产第一页| 日韩电影网在线| 欧美视频专区一二在线观看| 亚洲美女视频网站| 欧美亚洲国产成人精品| 97国产一区二区精品久久呦| 2023亚洲男人天堂| 国产精品自拍偷拍视频| 国产精品三级美女白浆呻吟| 搡老女人一区二区三区视频tv| 91日本在线观看| 97视频免费观看| 亚洲精选一区二区| 欧美日韩久久久久| 2018国产精品视频| 亚洲女人被黑人巨大进入al| 中文字幕视频在线免费欧美日韩综合在线看| 国产91色在线| 欧美色图在线视频| 成人h猎奇视频网站| 久久国产精彩视频| 亚洲国产欧美一区| 亚洲最大的av网站| 97国产成人精品视频| 成人午夜高潮视频| 永久免费看mv网站入口亚洲| 欧美日韩中文字幕| 国产精品激情av电影在线观看| 2019中文字幕全在线观看| 中文字幕亚洲精品| 亚洲人在线观看| 海角国产乱辈乱精品视频| 一个色综合导航| 中文字幕av一区| 国产91精品黑色丝袜高跟鞋| 高清欧美性猛交xxxx黑人猛交| 欧美精品激情blacked18| 亚洲91精品在线| 青青久久av北条麻妃海外网| 精品久久久久久电影| 日韩视频在线免费观看| 51视频国产精品一区二区| 日本精品久久久久影院| 国产欧美 在线欧美| 亚洲第一区第二区| 91久久精品美女高潮| 久久人体大胆视频| 日韩美女毛茸茸| 国产狼人综合免费视频| 国产精品在线看| 中文字幕一区二区精品| 国产精品视频一| 在线电影av不卡网址| 国产精品自拍网| 亚洲成人亚洲激情| 欧美激情精品久久久久久变态| 欧美午夜激情在线| 久久综合久久美利坚合众国| 亚洲奶大毛多的老太婆| 国模精品一区二区三区色天香| 国产欧美精品一区二区三区-老狼| 欧美性jizz18性欧美| 亚洲热线99精品视频| 91成人免费观看网站| 成人妇女免费播放久久久| 亚洲91av视频| 欧美精品videosex极品1| 中文字幕精品视频| 最新亚洲国产精品| 插插插亚洲综合网| 欧美在线观看日本一区| 国产精品色婷婷视频| 欧美性理论片在线观看片免费| 欧美在线免费观看| 国产精品日韩在线| www.日本久久久久com.| 亚洲综合色激情五月| 精品自在线视频| 亚洲精品www久久久久久广东| 韩国视频理论视频久久| 欧美三级欧美成人高清www| 国产视频亚洲精品| 成人免费网站在线观看| 亚洲男人天堂九九视频| 欧美日韩激情视频8区| 国产精品中文在线| 欧美日韩中文字幕在线| 精品久久久久人成| 国产精品pans私拍| 中文字幕日韩视频| 精品美女永久免费视频| 欧美性xxxx极品hd满灌| 91久久国产综合久久91精品网站| 国产精国产精品| 91欧美视频网站|