현재 기본 로그인 페이지를 사용하여 사용자가 앱에 액세스 할 수 있는지 확인하는 앱을 만들고 있습니다. 나는 간단한 웹 스크립트에서 사용자 이름과 암호를 사용하기 위해 this frame work을 사용하는 this tutorial의 도움으로 로그인 부분을 만들었습니다.SBJson 프레임 워크가있는 활동 표시기
다른 누군가가 문제를 해결하거나 도움을 줄 수 있기를 바랍니다. 나는 활동 지시자를 나타내지 않을 것이고, 나는 활동 지시자로서 MBProgressHUD을 사용하고있다.
그래서 실험 해 보았지만 앱이 URL에 연결할 때 활동 표시기를 표시 할 수 없습니다. 로그인 프로세스로 시뮬레이션 한 연결 상태가 좋지 않지만 앱이 URL에 연결하면 활동 표시기가 표시되지 않습니다. 오류시에만 표시되며 성공한로드 유형은로드가 완료 될 때까지 로그인 버튼이 눌려진 상태 (파란색 강조 표시된 상태)임을 나타냅니다. 때문에 sendSynchronousRequest:returningResponse:error:
이 방법의 사용에
// Login button
- (IBAction)loginBtnClicked:(id)sender
{
// Show the activity indicator
[HUD showUIBlockingIndicatorWithText:@"Loggar in..."];
@try {
if([[userNameTxtField text] isEqualToString:@""] || [[passwordTxtField text] isEqualToString:@""]) {
// No username or password entered
[self alertStatus:@"Du måste ange användarnamn och lösenord" :@"Något gick fel!"];
// Hide activity indicator
[HUD hideUIBlockingIndicator];
} else {
NSString *post =[[NSString alloc] initWithFormat:@"username=%@&password=%@",[userNameTxtField text],[passwordTxtField text]];
NSLog(@"PostData: %@",post);
NSURL *url=[NSURL URLWithString:@"http://www.nebulon.se/json/sendus/jsonlogin.php"];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
//[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];
NSError *error = [[NSError alloc] init];
NSHTTPURLResponse *response = nil;
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
NSLog(@"Response code: %d", [response statusCode]);
if ([response statusCode] >=200 && [response statusCode] <300){
NSString *responseData = [[NSString alloc]initWithData:urlData encoding:NSUTF8StringEncoding];
NSLog(@"Response ==> %@", responseData);
SBJsonParser *jsonParser = [SBJsonParser new];
NSDictionary *jsonData = (NSDictionary *) [jsonParser objectWithString:responseData error:nil];
NSLog(@"%@",jsonData);
NSInteger success = [(NSNumber *) [jsonData objectForKey:@"success"] integerValue];
NSLog(@"%d",success);
if(success == 1){
// Login success, grant user access to app
NSLog(@"Login SUCCESS");
[self loginSuccess];
// Hide activity indicator
[HUD hideUIBlockingIndicator];
// Store username
NSString *userName = [userNameTxtField text];
NSUserDefaults *UserDefaults = [NSUserDefaults standardUserDefaults];
[UserDefaults setObject:userName forKey:@"userName"];
[UserDefaults synchronize];
[self dismissViewControllerAnimated:NO completion:nil];
} else {
// Login error
NSString *error_msg = (NSString *) [jsonData objectForKey:@"error_message"];
[self alertStatus:error_msg :@"Inloggningen misslyckades"];
[self loginFailed];
// Hide activity indicator
[HUD hideUIBlockingIndicator];
}
} else {
// Login error
if (error) NSLog(@"Error: %@", error);
[self alertStatus:@"Ingen nätverksuppkoppling hittades." :@"Ett fel har inträffat!"];
[self loginFailed];
// Hide activity indicator
[HUD hideUIBlockingIndicator];
}
}
}
@catch (NSException * e) {
// Login error
NSLog(@"Exception: %@", e);
[self alertStatus:@"Inloggningen misslyckades." :@"Ett fel har inträffat!"];
[self loginFailed];
// Hide activity indicator
[HUD hideUIBlockingIndicator];
}
}
@SteveWilford 위의 코드에 대한 제안을 구현할 수 있습니까? – Oskariagon
@Oskar 나는 올바른 답을 줄 수있는 작은 코드 스 니펫을 포함하도록 내 대답을 편집했습니다. –
제공 한 도움으로 해결하려고 노력할 것입니다. 그런데 메소드가 메인/UI 스레드를 차단하여 HUD가 메소드가 반환 될 때까지 표시하지 않는 이유는 무엇입니까? – Oskariagon