我们在用XMPP时,经常会遇到各种各种问题,下面是笔者遇到的问题以及解决他们的方法。
一.设置myJID的问题:下面这种情况就是忘记设置myJID:
解决办法:
二 . 服务器端口设置错误会出现下面的问题:
解决办法:不设置端口(默认已经设置)或者在程序中直接说明是5222,比如_xmppStream.hostPort=5222;
三 明明设置了域名,可偏偏就是出现了下面的情况:
解决办法:如果设置的域名出现了上面的情况,可以试着指定用IP作为域名
这个问题困扰了我一个下午,后来我试着用IP作为域名,结果就OK了,真是黄天不负有心人啦!下面是连接成功的截图
四 当我们点击的登录按钮时,出现了下面的情况:
出现这种状况:
解决办法:仔细检查你的用户名与密码。笔者出现这种情况就是用户名输错了,修改错误后,程序运行结果如下:
五 当我们按照下图故意输入错误的用户名zhangsan2(正确用户名为zhangsan)
控制台输出下面的提示:
我们再以正确的用户名登陆:
当我们点击登陆按钮之后:发现模拟器一直处在下面这个界面,
控制台输出下面提示:
出现这个问题的解决方法是:
然后运行程序:可在控制台看到如下结果:
六 我们在点击注册按钮之后,出现了下面的情况,也就是注册失败:
为什么会出现这种情况了??很可能就是你的注册名与注册密码,还有就是你的登录名和登录密码搞混了,回到你的管理注册的控制器的管理登录按钮的方法,如下图:这是错把注册名与注册密码
还有登录名和登录密码写错了:
正确的应该如下图:
修改错误之后运行程序,如下图:
Xcode报出下面的错误:
调试的时候,断点总是指着代理那句代码:如下图:
这是为什么了断点老是指着这里?原来上次实现了注册控制器的代理,当我们再次点击“其他方式登陆”的按钮时,它也会弹出一个注册导航控制器,然而我们获取到的已不再是它的登录导航控制器了,因而爆出了错误。所以,我们需要判断一下,将代码修改如下,之前就做一个判断:
修改之后,一切又都可以正常运行了!
八 在故事版中,我们有时候确实将动态的表格改为静态之后,然后在模拟器上运行,没有看到我们想要的结果,如下图
于是,我的思路是是不是这颜色遮盖了静态的表格,于是笔者试着将静态的表格设置了颜色以示区别,然后运行
结果还是和上次的结果一样,什么都没有!!这是为甚了?这是因为我们的这个表格是动态表格改过来的,而这个表格的控制器是WCMecontroller,而他是继承自UITableViewController的,(笔者使用的Xcode版本是6.0.1的)它在.m文件中默认实现了两个方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
将他们注释掉,或者删除,再次运行就可以啦!!!!!!!!!
这个问题可急死了笔者,从上午一直到晚上才把它这个问题找出来,真是编程不易啊!!!!因而在此写出来和大家分享!就是为了让大家在这方面少走弯路,始终对编程保持着信心!
九 今天开机重新运行Xcode,打开这个程序,发现除了下面的问题:
猛然发现原来我没有登录spark,于是我尝试登录spark,发现也登录失败!到这里的时候,我想非常有可能是服务器出了问题,登陆后台,出现了下面的荒唐问题,
明明我的用户名和密码都没错,为什么它提示我登录后台失败了呢?
原来openfire服务器是用java语言写的,在Mac上运行不是特别的稳定,老是隔段时间就会出现这样的问题,所以现在笔者碰到这样的问题也不会像当初那样急的乱跳,打开你的系统偏好设置,停止你的openfire服务器,然后重启你的openfire:
然后再去登陆你的后台,就ok啦!!!
好啦,今天暂时先写到这,有更新在写,再和大家分享了!!!!!
十 有时候我们重新设置了域名,可能会出现下面的状况:
解决办法:删除原程序,然后重新运行即可
十一 笔者真的是被这个问题缠的心力憔悴,信心一度被摧毁,不管我怎么找都找不到错误前几天。然而,今天突然想到以前碰的的这个类似IP地址和域名到底用哪个的问题,忽然一下就明白啦!!
好了,长话短说,转入正题。
在控制台输出的结果是:
明明没错啊可就是获取不到好友,这该怎么办呢?想想以前碰到过这种问题,我试着用域名去登陆
如下:
控制台总算输出了下面我们想要得到的结果:如下
这里笔者真是感慨良多啊!求人不如求己,我在XMPP吧发了这个帖子没人回答,我在cocoachina上也发了这个帖子,还是一直没人回答,后来我也在各种iOS技术群里问了同一个问题,居然没一个人回答我的问题,那时我的心都凉了。还好,上帝还没闭眼睡觉,一直在帮助那些努力学习,挣扎在XMPP上的孩纸。好了,问题也解决,我们下次见!!
十二 有时我们在程序中明明已经设置好了好友在线状态的判断,
可是程序运行时,却没有显示呢?如下图
这是怎么回事呢?这是因为我们没有设置表格的样式,
选中蓝色条纹框,确定,然后运行程序,就把刚才没有显示出来的状态显示出来了
看到右边在线的两个字了没有?这就是我们希望看到的结果!!
十三 这也许是个小小的遗漏问题,但也确实消耗了不少精力在这上面,打了很多断点找了很久还是没发现哪里有逻辑错误。
可是用终端打开沙盒,打开数据库如上图,明明有记录的,可是为什么没有加载上来了?
难道是这个参数没传进来?进去检查确实如此!
id destVc=segue.destinationViewController;
忘记把destinationViewController这个参数传进去了但是修改之后,聊天数据依然没有传进去
后来,想想数据实在数据源方法里面设置和加载,在这个方法加断点,发现竟然没有调用这两个方法!!!奇了怪了!原来在设置委托和数据源的时候,竟然只记得加了这句代码:
tableView.delegate=self;
而没有加上这句代码:
tableView.dataSource=self;
粗心啊!!做程序猿真的很需要冷静思考!发现问题,然后步步追踪。加上这句之后,数据就可以正常的显示出来了:
这就是今天的更新!哈哈,再见!
十四:在今天的测试中,遇到了下面的一个问题,百度了一下,很多人说是iOS8的系统的bug,问题如下图:
那么笔者是怎么解决这个问题的呢?首先打开你的模拟器的的照片这个应用,再把照片拖进去照片这个应用,而不是直接把你的照片拖进模拟器然后再去你的相册去使用你的照片,不然很可能会出现上面的错误报警当你点击选择图片的按钮时(之前我每次点击添加图片按钮的时候控制台就会抱这个错误)!!笔者也只是误打误撞的解决了这个问题,至于大家有没有更好的解决方法,欢迎留言交流与讨论!!!
十五 有时我们一个小小的符号,尽然也会折腾我们半天。在做图片上传的时候,笔者犯了一个错误。花了一下午的调试时间,想想虽然是一个小小的错误,但也是一笔宝贵的财富!如下图:
我把断点打在图中的位置,然后再选择照片上传的时候,总是不会执行到这一句代码。
之后我又试着单步调试, 总算发现了这个问题的猫腻所在:
接着继续单步调试:跳到了问题的关键所在!!
在懒加载的时候把这个感叹号给忘记打上去了!!我的天啦,总算找对根源了!
加上感叹号之后,运行程序如下图:控制台的输出
在文件上传服务器的图片保存目录下可以看到我们刚上传的图片:
好了,由于时间关系,今天的博客就更新到了这里了!!有什么疑问,可以留言一起交流!!!!
十六 在IOS7.0之前,本地通知无需注册,但在ios8之后需要注册,如果没有注册,会报出下面的提醒:
解决方法:在
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
这个方法中,进行注册:
if ([[UIDevice currentDevice].systemVersion doubleValue]>=8.0) {
UIUserNotificationSettings* settings=[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil];
[application registerUserNotificationSettings:settings];
}
return YES;