美文网首页
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

    XMPP代码实现 XMPP需要注意的地方 我们主要实现四个功能: 1.注册 2.登录 3.获取好友列表 4.聊天(...

  • 即时通讯

    1、是否使用过XMPP,XMPP的实现原理 1、XMPP是一个即时通讯的协议,它规范了用于即时通信在网络上数据传输...

  • XMPP的实现原理

    XMPP的实现原理 有没有做过即时通讯?是否使用过XMPP,讲述一下XMPP的实现原理 XMPP是一个即时通讯的协...

  • XMPP与环信

    XMPP --> 环信1.XMPP是网络层基于TCP协议,数据层基于XML协议的即时通讯协议。所以要实现通讯的话,...

  • Android中实现自定义XMPP消息包收发

    在Android平台实现XMPP即时通讯主要是使用asmack这个包,asmack是XMPP协议的实现。但是asm...

  • IOS 问题合集 面试

    是否使用过XMPP,XMPP的实现? 环信是一个即时通信的服务提供商 环信使用的是XMPP协议,它是再XMPP的基...

  • 即时通讯

    即时通讯 1.实现通讯功能 (1)即时通信可以用socket实现,成本肯定比较大 (2)使用xmpp实现即时通讯功...

  • iOS-进阶整理10 - 即时通信1 XMPP openfire

    即时通信(Instant Messaging),就是扣扣,微信它有多种实现方式,如XMPP、环信、融云等。XMPP...

  • 即时通讯

    XMPP XMPP的实现原理 XMPP是一个即时通讯的协议,它规范了用于即时通信在网络上数据传输格式的,比如登录,...

  • XMPP基础

    概要 1、即时通讯技术简介2、XMPP诞生的由来3、XMPP特点4、XMPP的基本结构5、XMPP工作原理6、XM...

网友评论

      本文标题:XMPP实现1

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