0

이 난에 대한 호출의 백업이 비동기정지 UIACtivityIndicatorView 변덕 아이폰 OS

[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) 

을 사용하여 POST 요청을 할 연결이 중지 여기에서 나는 UIActivityIndicatorView

-(void)connectionDidFinishLoading:(NSURLConnection*)connection 
{ 
NSLog(@"Connection finish"); 
[self stopAnimatingSpinner]; 
} 

을 중지 내 메서드를 호출 할 때 Heres 중지 애니메이션 방법 (나는 조합을 시도하고 아래의 모든 중지, 숨기기 메서드를 제거

-(void)stopAnimatingSpinner{ 

[submittingActivity stopAnimating]; 
submittingActivity.hidden = YES; 
[submittingActivity removeFromSuperview]; 
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO]; 

} 

이제 문제는 때로는 멈추지 않고 때로는 멈추고 매우 무작위입니다. 연결 콜백에 의존하지 않고 내 데이터의 구문 분석을 마치면 활동이 멈추게됩니다. 때로는 때때로 멈추는 경우가 있습니다.

제가 생각할 수있는 유일한 점은 연결이 주 스레드를 차단하고 있지만 다른 스레드가 아닌 가끔씩 작동한다는 것입니다.

+0

매번 콘솔에 "연결 마무리"가 인쇄됩니까? –

+0

@ GauravWadhwani 예 그렇습니다. UI를 업데이트하지 않는 메서드가 있으므로 로그를 항상 가져옵니다. –

+0

'removeFromSuperView'를 주석으로 처리하고 시도해보십시오. .. H2CO3에 의해 아래 답변에서 언급했듯이 작동하지 않을 수도 있습니다. 이미 그렇게하지 않은 경우 메인 스레드에서 UI 업데이트를 실행하십시오. –

답변

0

두 가지 주요 문제 : 당신이 NSURLConnectionsendAsynchronousRequest: (등) 방법을 사용하는 경우

  1. , 만 완료 블록이 완료되면 호출되며 connectionDidFinishLoading: 위임 방법이 아닌 것입니다. 그것은 또 다른 API입니다.

  2. UI를 업데이트하는 경우 은 항상 메인 스레드에서 수행해야합니다. 그렇지 않으면 프로그램에서 정의되지 않은 동작을 호출합니다. 당신이 메인 스레드에서 NSURLConnection를 호출하는 경우, 다음 완료 핸들러도 메인 스레드에서

    dispatch_sync(dispatch_get_main_queue(), ^{ [self stopAnimatingSpinner]; });

+0

안녕하세요, H2CO3 나는 이것을 시도해보고 돌려 줄 수도 있다고 생각했습니다. 덕분에 –

+0

이것은 응용 프로그램을 크래시하는 것처럼 보입니다. 응답이 없습니다. 즉, 로그에 아무것도 쓰지 않고 아무것도 할 수 없습니다. 전에 시도한 것은 ... dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),^{ // 배경 코드 프로세싱 )}; 하지만 시간이 지나면 멈추지 만 기대하지는 않는다. ?? –

+0

@AlexMcPherson 두 번째 문제점을 이해할 수 없습니다. 다시 말해주십시오. –

0

를 호출된다 : 그래서 주 스레드에서 파견있어 블록에 애니메이션을 중지 코드를 포장 . 따라서 회 전자를 중지 할 때 dispatch_sync을 호출해서는 안됩니다.

+0

dispatch_async로 변경했는데이 테스트가 더 효과적 일 것 같습니다. –

+0

완성 처리기가 이미 메인 스레드에 있으므로이 경우 GCD를 사용할 필요가 없다고 생각합니다. 따라서 [self stopAnimatingSpinner]를 호출하면 충분합니다. – sixthcent

+0

나는이 모든 것을 계속하고 있기 때문에 두려워하지 않으며이 질문에 대한 이유는 때로는 다른 사람들을 비난하지 않는다. 비동기가 가장 안정적이지 않고 아직 작동하지 않지만 테스트를 계속할 것이다. –