本人有若干成套學習視頻, 可試看! 可試看! 可試看, 重要的事情說三遍 包含Java
, 數(shù)據(jù)結(jié)構與算法
, iOS
, 安卓
, python
, flutter
等等, 如有需要, 聯(lián)系微信tsaievan
.
先看4張圖
Snip20161001_4.png
發(fā)現(xiàn)了什么? 無論群聊中的用戶是誰,顯示得都是同一個圖標, 有可能是 nil, 有可能是 A, 有可能是 B
很不幸的是,老師上課的時候一直是 nil.
剛開始, 我試圖打印真實的 jid, 一直打印不出來,后來反復運行,居然打印出來了. 后來就發(fā)現(xiàn),這個真實的 jid, 一直在我加群聊的那幾個賬戶里面來回隨機.
我在測試的時候,沒有動老師一行代碼,只是把域名和用戶名改成了自己的而已
后來發(fā)現(xiàn)問題出現(xiàn)在這一行代碼
request.predicate = [NSPredicate predicateWithFormat:@"jidStr == %@",jid.bare];
謂詞的設置,如果是== jid.bare 的話,查詢是有問題的.
應該改成
request.predicate = [NSPredicate predicateWithFormat:@"jidStr == %@",jid.full];
哈哈哈,史詩級 bug 就一行代碼,是不是覺得很坑?
因為
完整的Jid包括 Username@Domain/resource
resource-->資源/來源异袄,用于區(qū)別客戶端來源掀亥,xmpp協(xié)議設計為可多客戶端同時登陸胶哲,resource就是用于區(qū)分同一用戶不同端登陸
如果你在設置謂詞的時候,不包含resource,那數(shù)據(jù)庫查詢時候怎么能確定究竟是哪一個用戶呢,這就造成了前面四張圖的情況..
給大家更改后的效果,是不是完美解決?
效果圖