最近項目需要實現未讀消息實時刷新,UI界面還是比較low的,用的uicollectionview放了一些cell,每個代表一個功能,項目需要在消息的cell上,圖片的右上角實時刷新未讀消息的數量,因為不想每隔幾秒就調用接口去查詢看有沒有新消息(感覺這種方式好傻…),所以後面決定使用推送的方式實現該功能,後台使用Redis每五秒刷新一次,一旦某個用戶的未讀消息條數更新了,就放一個自定義通知(本來准備用通知的badge屬性,但是發現安卓並沒有這個東東)到該用戶,移動端接收到以後就進行相應處理,需求大概就這樣,這裡記錄一下中間遇到的問題。
IOS這邊實現的邏輯大概是接收到自定義通知以後,將未讀條數保存到NSUserDefaults中,然後發送通知(對UICollectionView所在的Controller注冊了一個觀察者對象),通知UICollectionView進行刷新,進入消息列表讀取消息以後,調用接口更新消息狀態,返回成功以後更新未讀條數並存入NSUserDefaults,並發送通知,開發過程中遇到了幾個問題。
代碼邏輯是在加載cell的時候,判斷這個cell是不是消息列表的cell,如果是就在右上角加一個自定義的button,文本就是NSUserDefaults中存的數值,這個button是用的Masonry加的約束,關於Masonry的使用,可以參考http://www.cocoachina.com/IOS/20141219/10702.html,
1.UIcollectionView刷新的時候,會使別的cell上面也顯示這個button,數值就是消息cell的上一次保存的數值,解決方法是不使用原來的[UICollectionView reloadData],改為使用[UICollectionView reloadItemsAtIndexPaths:]方法只刷新消息列表cell。
2.在主界面的時候,後台推送自定義通知更新消息未讀數正常,但是當退出消息列表的時候,發現UIcollectionView刷新以後的未讀數是NSUserDefaults上一次保存的數值,打斷點發現NSUserDefaults數據沒有問題,最後發現是對button做了多次約束,每次都是調用的mas_makeConstraints,最後解決方法就是將button加到cell的xib中去。
3.集成極光推送的時候也發現了一個問題,就是IOS 10新加入的UserNotifications.framework庫,對它的引入忘記了改為Optional,上線以後發現iOS 10一下的系統會出現閃退….,最後上線完以後第二天一來就又更新了一次。
以上就是iOS使用推送解決未讀消息實時刷新的全文介紹,希望對您學習和使用ios應用開發有所幫助.【iOS使用推送解決未讀消息實時刷新】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!