2014-04-18 2 views
4

인증을 위해 웹 서비스를 사용하여 로그인 양식이 필요한 프로젝트 작업 중입니다. 서버에 연결하는 데 문제가 없지만 NSURLSession이 내 사용자 인터페이스를 차단하는 것처럼 보입니다. 그리고 많은 디버깅 후에 이유를 알지 못합니다. 편의상NSURLSession을 사용할 때 UI가 차단됩니다.

, 여기에 짧은 내 코드입니다 :

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"example.com/service"]]; 

//1 
    //_sessionLogin = [NSURLSession sessionWithConfiguration:sessionConfigurationLogin delegate:self delegateQueue:nil]; 
//2 //Whether I use 1 or 2, it acts the same way 

    _sessionLogin = [NSURLSession sharedSession]; 

    NSURLSessionDataTask *sessionDataTaskLogin = [_sessionLogin dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) 
    { 
     if(!error) 
     { 
      NSLog(@"loginWithSuccess"); 
      UIAlertView *alertError = [[UIAlertView alloc] initWithTitle:@"Login ok" message:@"ok" delegate:self cancelButtonTitle:@"Close" otherButtonTitles: nil]; 
      [alertError show]; 

    } 
}]; 

//Begin login request 
[sessionDataTaskLogin resume]; 

_sessionLogin가 NSURLSession

내 서버에 대한 연결이 NSLog 빠르고,있는 그대로 ("loginWithSuccess"@) I 후 거의 바로 나타납니다 로그인 버튼을 눌렀으나 UIAlertView가 보여준 10 초 이상 동안 (오랫동안 오래 걸립니다) 시간이 걸립니다. 그리고 나는 UI와도 상호 작용할 수 없다.

모든 솔루션에 대해 미리 감사드립니다.

+0

다른 스레드에서 비동기 요청 또는 요청을 수행하십시오. – Larme

+0

나는 어떤 스레드도 만들지 않았습니다. 이 코드는 내 로그인 버튼에 있습니다. 이것은 프로그램의 첫 단계에있는 로그인 양식입니다. –

+3

@Larme 그는 비동기 적으로 처리하고 있습니다. 문제는 완료 블록 (따라서 경고보기)이 주 스레드에서 실행되고 있지 않다는 것입니다. – Rob

답변

10

완료 블록이 주 스레드에서 실행되고 있지 않습니다. UI 업데이트는 주 스레드에서 발생해야하므로 경고보기를 기본 대기열로 보내야하며 즉시 볼 수 있습니다.

NSURLSessionDataTask *sessionDataTaskLogin = [_sessionLogin dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
    if (!error) { 
     NSLog(@"loginWithSuccess"); 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      UIAlertView *alertError = [[UIAlertView alloc] initWithTitle:@"Login ok" message:@"ok" delegate:self cancelButtonTitle:@"Close" otherButtonTitles: nil]; 
      [alertError show]; 
     }); 
    } 
}]; 
+1

나는 그것을 작동하게했다! 고마워요! –

+1

나는 또한 똑같은 문제가 있었고, 당신의 솔루션은 완벽합니다. – rinkesh

관련 문제