XMPP实现1

2015-12-22  本文已影响72人  Axela

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这个文件删除掉,重新编译一下就没问题了

上一篇下一篇

猜你喜欢

热点阅读