美文网首页
XMPP实现1

XMPP实现1

作者: Axela | 来源:发表于2015-12-22 21:52 被阅读72次

    XMPP代码实现

    XMPP需要注意的地方

    我们主要实现四个功能:

    1.注册

    2.登录

    3.获取好友列表

    4.聊天(最重要的功能)

    首先我们创建一个工程

    然后我们要引入XMPP所需要的框架。

    在这里要给大家说明的是,Xcode5和Xcode6之间有一些区别

    在Xcdoe5里面 我们需要导入libresolv.dylib框架和libxml2.dylib框架(xmpp是依赖于Xml的)

    另外需要在Build Settings 下的Header Search Paths添加路径/usr/include/libxml2(注意是usr不是user)

    但是由于Xcode6里面已经内置了框架,所以我们不用添加

    我们在引入

    这个框架的时候,Xcode6会给我们报错,提示我们UIImage等文件无法识别缺少框架

    我们在学习UIImage的时候已经有说过,UIImage是UIKit管理数据源的,而我们的OC是由Foundation来管理的。这里千万要记住

    运行一下,OK没问题

    我们来搭建一下我们的页面,这次使用storyboard来进行此次的页面搭建

    通常我们在使用storyboard的时候只用一个就创建所有的页面,这样的好处呢就是直观

    在一个文件里可以看到所有的界面和他们之间的关系

    那不好的地方就是一旦你得界面多了那就看起来太混乱,关系太复杂了,我们来看一个例子

    这样的话我们打开这个storyboard的话,如果你得电脑性能比较好那打开的还稍微快点

    如果你得电脑性能稍微差一点的话打开这个storyboard就需要十到二十几秒的时间,加载的特别慢,所以我们可以把这个storyboard按模块进行拆分

    我们这个登录注册就算是一个模块,一般我们登录了以后就保存了我们的登录状态

    下次就不需要保存了,我们就不再需要这个登录功能了,所以呢,我们可以把登录注册放在一个storyboard里面

    我们的获取好友列表和聊天的功能就可以放在另一个storyboard里面,这样就可以划分这个storyboard文件

    结构比较清晰,而且我们第二次进入这个应用的时候就可以不再加载这个登录界面,可以节省一些内存资源,这也是懒加载的一种形式

    首先我们创建一个storyboard作为登录和注册的模块

    我们创建了storyboard后需要创建相对应的视图控制器来进行关联一下各个界面

    然后我们关联一下我们的控件,我们的注册按钮在关联的时候只需要关联一下事件就行了。

    这个时候我们已经有了两个storyboard,那如何才能切换呢?

    我们是不是需要去进行一个登录状态的判断呢?

    判断一下当前的登录状态,如果未登录,我们让他显示登录界面

    如果已经登录成功,那让他显示我们的聊天界面或好友列表界面

    在我们的Appdelegate里,

    (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    {

    }

    在这个方法内,我们首先创建一个storyboard

    UIStoryboard *MainStorybard

    然后我们点进去看一看他里面的方法

    我们可以看到有一个加号方法,

    + (UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle *)storyboardBundleOrNil;

    他有两个参数

    这个Name就是你得storyboard文件名字

    还有一个bundle,这个bundle就是你这个storyboard文件所在的bundle

    如果你这个文件在mainbundle里面,我们就可以给他一个nil,他就会尝试去mainbundle里去查找,这是一个便利构造方法

    下面还有两个实例方法

    - (id)instantiateInitialViewController;

    - (id)instantiateViewControllerWithIdentifier:(NSString *)identifier;

    这两个方法有什么区别呢?

    instantiateInitialViewController是什么呢?

    我们可以点击我们其中一个storyboard,

    设置好了以后我们的NavigationController 前面会有一个箭头

    这个方法的功能就是把我们的storyboard设置为主入口

    我们现在来完成我们的storyboard对象,name不用给后缀,bundle如果给nil,则默认为是mainBundle

    然后获取storyboard中得入口视图控制器对象

    如图:

    在这里,我们展示之前需要写入[self.window makeKeyAndVisible];

    在这段代码中我们有一句

    BOOL haveLogin = [[NSUserDefaultsstandardUserDefaults]boolForKey:@“haveLogin”];

    这段代码的意思就是判断我们的登陆状态

    这里有时会出现一个路径错误

    file '/Applications/Xcode 2.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8.0.sdk/System/Library/Frameworks/UIKit.framework/Headers/UIStoryboard.h' has been modified since the precompiled header '/Users/lanou3g/Library/Developer/Xcode/DerivedData/ModuleCache/3V1NN6TL894NX/UIKit-2DYE2I2D1B3GL.pcm' was built

    我们点击Finder 前往文件夹/Users/lanou3g/Library/Developer/Xcode/DerivedData/ModuleCache/3V1NN6TL894NX/UIKit-2DYE2I2D1B3GL.pcm

    进入里面把UIKit-2DYE2I2D1B3GL.pcm这个文件删除掉,重新编译一下就没问题了

    相关文章

      网友评论

          本文标题:XMPP实现1

          本文链接:https://www.haomeiwen.com/subject/tqqvhttx.html