【发布时间】:2014-04-28 13:05:17
【问题描述】:
我尝试了太多来解决我的波纹管问题,但我失败了。请帮我解决这个问题。我有登录视图,在验证 ID 和密码后,我将其推送到下一个视图控制器。请检查下图。
问题 - 当 ID 和密码正确时,它会推送到下一个视图控制器,但在单击登录按钮 2 次后。
代码-
ServiceManager.m
-(void)initGetAppServiceRequestWithUrl:(NSString *)baseUrl onCompletion:
(ServiceCompletionHandler)handler
{
NSString *fullUrl = [NSString stringWithFormat:@"%@",[baseUrl
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL
URLWithString:fullUrl]];
[NSURLConnection sendAsynchronousRequest:(NSURLRequest *)request
queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *response,NSData *data,NSError *error)
{
if (error) {
handler(nil,error);
// NSLog(@"error = %@",error);
}
else
{ handler(data, nil);
// NSLog(@"data = %@",data);
}
}];
}
JSONResponseHandler.m
+(void)handleResponseData:(NSData *)responseData onCompletion:(JSONHandler)handler
{
if (responseData) {
NSError *jsonParseError;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData
options:kNilOptions error:&jsonParseError];
if (!json) {
handler(nil , jsonParseError);
}
else
{
handler (json , nil);
}
}
}
ASKevrServiceManager.m
-(void)login:(Login *)login completionHandler:(ServiceCompletionHandler)handler
{
NSString *loginUrl = [NSString
stringWithFormat:@"http://249development.us/johnsan/askever/login.php?
login=%@&password=%@",login.emailAddr , login.password];
[self initGetAppServiceRequestWithUrl:loginUrl onCompletion:^(id object, NSError
*error)
{
handler(object , error);
}
];
}
ASKevrOperationManager.m
+(void)login:(Login *)login handler:(OperationHandler)handler
{
ASKevrServiceManager *serviceManager = [[ASKevrServiceManager alloc]init];
[serviceManager login:login completionHandler:^(id object, NSError *error)
{
[JSONResponseHandler handleResponseData:object onCompletion:^(NSDictionary
*json , NSError *jsonError)
{
if(json)
{
handler(json , nil , YES);
}
else
{
handler(nil , jsonError , NO);
}
}];
}];
}
LoginViewController.m
-(BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
if ([identifier isEqualToString:@"pushTab"])
{
if ([emailTxt.text isEqualToString:@""] || [passwordTxt.text
isEqualToString:@""])
{
[self showAlertWithMessage:@"Please write your id or password"];
return NO;
}
else
{
Login *loginModel = [[Login alloc]init];
loginModel.emailAddr =emailTxt.text;
loginModel.password = passwordTxt.text;
[ASKevrOperationManager login:loginModel handler:^(id object , NSError *error ,
BOOL success)
{
if (success)
{
NSLog(@"object =%@",object);
NSDictionary *arr = [object objectForKey:@"response"];
str = [arr objectForKey:@"flag"];
//check for error
NSDictionary *toDict = [object objectForKey:@"response"];
currentUserId = [toDict objectForKey:@"c_id"];
NSLog(@"currentUserId = %@",currentUserId);
}
else
{
[self showAlertWithMessage:@"Wrong Id or Password."];
}
}];
NSLog(@"str = %@",str);
if ([str isEqualToString:@"1"])
{
// [self showAlertWithMessage:@"Wrong Id or Password."];
return YES;
}
}
}
return NO;
}
【问题讨论】:
-
@什么问题?你能详细说明一下吗
-
当然,一旦用户成功通过身份验证,任何身份验证视图控制器都应该弹出;它不应该呈现更多的视图控制器,因为它可能随时被调用以重新验证?
-
@trojanfoe:实际上我在一个地方发现了错误-“initGetAppServiceRequestWithUrl:”首先调用了这个方法,然后我得到了 JSON 对象。但是当我第一次点击有效身份验证时它不是发送 JSON 对象,当我使用相同的身份验证第二次单击它时,它正在发送 JSON 并调用 push segue。
-
@meda : 我已经放了一行名为“Issue”的行。请检查一下。
-
@chaaruu 您是否将转场直接附加到按钮上?你不应该,也登录不应该是导航的一部分
标签: ios uistoryboardsegue