我试图解决以下问题,但我失败了。请帮我解决这个问题。我有登录视图,在验证了id和密码后,我将它推送到下一个视图控制器。请检查下面的图像。 shouldPerformSegueWithIdentifier issue
问题 - 当Id和Password正确时,它会推送到下一个视图控制器,但在登录按钮上点击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;
}
@what是问题?你能详细说明吗? – meda
当用户成功认证后,任何认证视图控制器都应该弹出;它不应该提供进一步的视图控制器,因为它可能随时被调用来重新认证? – trojanfoe
@trojanfoe:其实我在一个地方发现错误 - “initGetAppServiceRequestWithUrl:”首先调用此方法,然后我得到JSON object.But当我第一次用有效身份验证点击时,它不发送JSON对象,当我第二次使用相同的身份验证发送JSON以及调用push segue。 – chaaruu