XMPP之Roster(花名冊(cè))模塊

如之前所說饵较,建議建立一個(gè)XMPPStream單例對(duì)象,然后再在這個(gè)單例對(duì)象中進(jìn)行模塊添加,當(dāng)然使用其他你認(rèn)為合適的方式進(jìn)行下面的模塊添加也是OK的

如果你是用pod初始化的項(xiàng)目,那么在項(xiàng)目中的XMPPFramework文件夾下可以直接看到Roster目錄

1门岔,導(dǎo)入頭文件
#import "XMPPRoster.h"
#import "XMPPRosterCoreDataStorage.h"
2, 模塊添加
//花名冊(cè)模塊
_rosterStorage = [XMPPRosterCoreDataStorage sharedInstance];
_roster = [[XMPPRoster alloc] initWithRosterStorage:self.rosterStorage];
[self.roster activate:_xmppStream];
3烤送,花名冊(cè)模塊使用:

如果需要使用模塊寒随,需要把模塊相應(yīng)的對(duì)象暴漏到頭文件中方便我們之后調(diào)用
在本模塊中需要暴漏的是XMPPRoster對(duì)象和XMPPRosterCoreDataStorage,前者用來設(shè)置代理以監(jiān)聽好友請(qǐng)求等帮坚,后者需要用來獲取數(shù)據(jù)上下文妻往,進(jìn)行數(shù)據(jù)查詢,具體如下:

//3.1, 從數(shù)據(jù)庫中取值(CoreData數(shù)據(jù)庫文件在工程中是在XMPPFramework文件夾下的Resources文件夾里)

//1试和,獲取上下文讯泣,可以直接從rosterStorage中獲取
NSManagedObjectContext *context = [IMStream sharedStream].rosterStorage.mainThreadManagedObjectContext;

//2,創(chuàng)建請(qǐng)求并設(shè)置過濾條件以及排序等
//注意:所有當(dāng)前用戶的好友的streamBareJidStr字段內(nèi)容都是當(dāng)前用戶的jid字符串
//這個(gè)是需要查詢的表:XMPPUserCoreDataStorageObject
NSString *account = [[NSUserDefaults standardUserDefaults] objectForKey:@"account"];
NSString *jid = [NSString stringWithFormat:@"%@@192.168.0.2", account];

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"XMPPUserCoreDataStorageObject"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"streamBareJidStr = %@",jid];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"displayName" ascending:YES];
request.predicate = predicate;
request.sortDescriptors = @[sortDescriptor];

/*
//第一種執(zhí)行請(qǐng)求的方式是CoreData的方式阅悍,這種方式是不能實(shí)時(shí)監(jiān)聽好友列表的改變的
NSError *error;
self.contacts = [context executeFetchRequest:request error:&error];
 */

//3.1,第二種是用XMPP提供的執(zhí)行請(qǐng)求方式好渠,可以實(shí)時(shí)監(jiān)聽好友添加刪除變化
self.fetchController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
//3.2昨稼,設(shè)置代理方便監(jiān)聽
self.fetchController.delegate = self;
//3.3,真正的執(zhí)行請(qǐng)求得到數(shù)據(jù)
NSError *error;
[self.fetchController performFetch:&error];
if (error) {
    NSLog(@"%@",error);
}


  • 3.2拳锚,解析查詢的結(jié)果
//如果沒有錯(cuò)誤假栓,說明請(qǐng)求正確,那么就可以拿到請(qǐng)求到的數(shù)組結(jié)果了
NSLog(@"%@",self.fetchController.fetchedObjects);
//下面是取出第一個(gè)內(nèi)容的例子
XMPPUserCoreDataStorageObject *userObject = self.fetchController.fetchedObjects[0];
  • 3.3霍掺,在合適的位置進(jìn)行了數(shù)據(jù)的查詢之后就可以進(jìn)行數(shù)據(jù)變化的監(jiān)聽了
//代理方式監(jiān)聽請(qǐng)求內(nèi)容的變化匾荆,我這里是進(jìn)行刷洗了表格內(nèi)容
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller{
    NSLog(@"數(shù)據(jù)發(fā)生變化:添加了好友或者被好友刪除了等");
    [self.tableView reloadData];
}
  • 3.4,監(jiān)聽好友添加請(qǐng)求,需要設(shè)置XMPPRoster代理為自己杆烁,然后實(shí)現(xiàn)監(jiān)聽方法即可牙丽,監(jiān)聽方法如下:
-(void)xmppRoster:(XMPPRoster *)sender didReceivePresenceSubscriptionRequest:(XMPPPresence *)presence{
    NSLog(@"接受到好友請(qǐng)求");
}
4,釋放模塊兔魂,當(dāng)你不需要再使用這個(gè)模塊的時(shí)候可以釋放掉這個(gè)模塊(在單例中貌似沒有這個(gè)必要烤芦,可以在控制器死亡的時(shí)候進(jìn)行釋放,具體放在那里看具體情況)
//首先凍結(jié)模塊
[_roster deactivate];
//然后把對(duì)象設(shè)置為nil
_rosterStorage = nil;
_roster = nil;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末入热,一起剝皮案震驚了整個(gè)濱河市拍棕,隨后出現(xiàn)的幾起案子晓铆,更是在濱河造成了極大的恐慌勺良,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件骄噪,死亡現(xiàn)場(chǎng)離奇詭異尚困,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)链蕊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門事甜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人滔韵,你說我怎么就攤上這事逻谦。” “怎么了陪蜻?”我有些...
    開封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵邦马,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我宴卖,道長(zhǎng)滋将,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任症昏,我火速辦了婚禮,結(jié)果婚禮上肝谭,老公的妹妹穿的比我還像新娘。我一直安慰自己屁桑,他們只是感情好栏赴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開白布须眷。 她就那樣靜靜地躺著,像睡著了一般捕传。 火紅的嫁衣襯著肌膚如雪扩劝。 梳的紋絲不亂的頭發(fā)上棒呛,一...
    開封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音鱼喉,去河邊找鬼趋观。 笑死,一個(gè)胖子當(dāng)著我的面吹牛编曼,可吹牛的內(nèi)容都是我干的掐场。 我是一名探鬼主播抹沪,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼融欧,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了麦到?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粹淋,沒想到半個(gè)月后桃移,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年纤虽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了逼纸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翩隧。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡堆生,死狀恐怖雷酪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蔗怠,我是刑警寧澤吩跋,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站桥温,受9級(jí)特大地震影響梁丘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掏觉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一澳腹、第九天 我趴在偏房一處隱蔽的房頂上張望酱塔。 院中可真熱鬧,春花似錦谋国、人聲如沸迁沫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祷愉。三九已至赦颇,卻和暖如春媒怯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背欺殿。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來泰國打工脖苏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留定踱,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓山宾,卻偏偏與公主長(zhǎng)得像资锰,于是被迫代替她去往敵國和親阶祭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,170評(píng)論 25 707
  • *面試心聲:其實(shí)這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個(gè)offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,150評(píng)論 30 470
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)晌姚,斷路器,智...
    卡卡羅2017閱讀 134,662評(píng)論 18 139
  • 迎春花在路邊悄然開了 只有幾朵 連風(fēng)似乎都沒有注意到這一抹亮黃 只因?yàn)檫@是三月的羞赧 在低聲訴語 那時(shí)的夜晚 模糊...
    書呆魚77閱讀 373評(píng)論 0 3
  • 不翻票圈都忘記今天是圣誕節(jié)了世囊。 去年平安夜我香帶我去學(xué)林街吃小吃腌紧,去年圣誕節(jié)和我淺聽完秦濤的講座又逛到羅馬廣場(chǎng)看晚...
    旁觀者卿呀閱讀 332評(píng)論 0 1