(一)
1、首先是调用viewdidload方法。
2、先刷新然后从数据库里面获取所有的聊天记录(initBubbleDatas),这个方法写在刷新的方法里面,每次刷新都要调用
3、通过上面的方法将消息结构转换成聊天结构(structureBubbleDatasWithMessages),这个方法处理的对象是一个XML流,就是通过这个方法将里面的元素分类整理出来,比如消息类型(MJLMessageType),时间,消息内容(body),在这个方法里面我们还要根据信息的类型进行处理,这个一个方法
cmsg= [self structureMessageType:MJLMessageTypeText xmppMessage:object.message path:nil expandPath:nil stamp:timeStamp];这个方法里面是组织消息结构,是通过另外一个类CMMessage来装一下取出来的信息的里面的元素,CMMessage的属性基本上包括上面那个方法传过来的参数,同时还有更多,主要是有些参数还封装了另外的属性
然后就是将消息结构转换成聊天结构(structureBubbleData),通过这个方法将数据传入显示NSBubbleData,这个类是显示在ui上面的数据的直接来源,然后每条信息返回一个bubbleData对象,然后建立一个全局数组,将bubbleData全部装在这个全局数组bubbleDatas里面,此时方法structureBubbleDatasWithMessages已经执行完,目的达到,就是得到将
[(XMPPRoomMessageCoreDataStorageObject *)obj或者(XMPPMessageArchiving_Message_CoreDataObject *)obj对象转换成直接能被bubbletableview代理方法直接调用的对象。
4、上面那个方法会反复用到,也是最复杂的最关键的处理,处理完之后就是分布好视图(scrollToBottomWithTableHeight和atBottom)
,这两个分布视图的方法),将数组(bubbleData)里面的数据装在到UI上面。
以上是装在流程,下面是重点说一下
CMChatToolBar的定制以及发信息的流程。(二)
1、XMPP讨论组,类似qq的群或讨论组,我在做一个删除信息的功能,我首先是从保存所有信息的数据库并且在AppDelegate类里面的
xmppMessageArchivingCoreDataStorage,先建立一个以该数据库类似名字的实体,然后建立一个谓词和请求,谓词是请求的特征,是请求的样式,其实就是搜索,就是从数据库中搜索类似样式的个体,也可以不这样,可以一个一个对比,其实一样,
2、这里其实有个疑问,发信息的在聊天页面,信息是怎么保存在AppDelegate里面的数据库xmppMessageArchivingCoreDataStorage里面的??这里我想涉及到网络方面的问题,通过sendElement将数据发出去,同时通过本地的recerve??这里不懂
3、我用上面的方式获取讨论组里面的信息并删除,发现最新的信息里面没有了,但是在打开那个讨论组,发现信息还在,后来我知道,在讨论组里面信息保存有两份,一份是保存再上面的数据库里(所有的信息都保存在里面),还保存一份在xmpproomCoreDataStorage里面,我只删掉一份,而另外的没有删掉。
4、在开发过程中我想获得这些信息,但是不是这么简单像上面一样能获得信息,我想是上面的对象已经在AppDelegate里面进行了初始化和一系列搭配,使得保存数据的数据库联系起来,如果知识简单设一个属性不进行创建和适当搭配,我们是不能获得数据信息的,就像我们知道我们朋友(相当于数据)的位置,但是我们不知道路线等,我们就不能到达朋友的家里,
5、在开发中有一些很怪得命名方法,忽略它,不要紧的,不要被名字吓到了。