//导入响应的MBProgressHUD
// 显示遮盖
[MBProgressHUD showMessage:@"正在登录中"];
//利用 GCD开启一个线程,
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 移除遮盖
[MBProgressHUD hideHUD];
// 执行segue
[self performSegueWithIdentifier:@"login2contact" sender:nil];
});
//在block里面回掉传值步骤例如A主要判断连接的状态
//1.在一个控制器或者类文件定义回掉枚举方法
typedef enum {
XMPPResultTypeLoginSuccess,//登录成功
XMPPResultTypeLoginFailure,//登录失败
XMPPResultTypeNetErr//网络不给力
}XMPPResultType;
typedef void (^XMPPResultBlock)(XMPPResultType type);// XMPP请求结果的block
//并且在.m想用到这个代码快就可以把这个代码快一参数的形式传递过来
-(void)xmppUserLogin:(XMPPResultBlock)resultBlock{
// 先把block存起来
_resultBlock = resultBlock;
// Domain=XMPPStreamErrorDomain Code=1 "Attempting to connect while already connected or connecting." UserInfo=0x7fd86bf06700 {NSLocalizedDescription=Attempting to connect while already connected or connecting.}
// 如果以前连接过服务,要断开
[_xmppStream disconnect];
// 连接主机 成功后发送密码
[self connectToHost];
}
//B护着刷新主界面
[app xmppUserLogin:^(XMPPResultType type) {
[selfVc handleResultType:type];
}];
-(void)handleResultType:(XMPPResultType)type{
// 主线程刷新UI
dispatch_async(dispatch_get_main_queue(), ^{
[MBProgressHUD hideHUDForView:self.view
];
switch (type) {
case XMPPResultTypeLoginSuccess:
NSLog(@"登录成功");
[self enterMainPage];
break;
case XMPPResultTypeLoginFailure:
NSLog(@"登录失败");
[MBProgressHUD showError:@"用户名或者密码不正确" toView:self.view];
break;
case XMPPResultTypeNetErr:
[MBProgressHUD showError:@"网络不给力" toView:self.view];
default:
break;
}
});
}
//A
// 回调控制器登录成功
if(_resultBlock){
_resultBlock(XMPPResultTypeLoginSuccess);
}
// 判断block有无值,再回调给登录控制器
if (_resultBlock) {
_resultBlock(XMPPResultTypeLoginFailure);
}
// 如果没有错误,表示正常的断开连接(人为断开连接)
if(error && _resultBlock){
_resultBlock(XMPPResultTypeNetErr);
}
线程操作
最新推荐文章于 2021-09-02 16:15:27 发布