2011-01-13 4 views
0

메서드에서 시작하려면 UIActivityIndicatorView를 시작합니다. 그리고 NSXMLParser를 사용하여 동기화 된 XML에서 노드 정보를 가져옵니다. 구문 분석을 마친 후 UIActivityIndicatorView를 중지하고 싶습니다. XML을 파싱 할 때 UIActivityIndicatorView를 표시하지만 작동하지 않습니다. 아이디어가 있으십니까? 감사.동기식 프로세스에서 UIActivityIndicatorView에 대한 해결책이 있습니까?

- (void)buttonAction 
{ 
    [activityIndicator startAnimating]; 
    [self performSelector:@selector(doWork) withObject:nil afterDelay:0.0]; 
} 

- (void)doWork 
{ 
    //Do your xml parsing here... 
} 

이이 UI를 메인 스레드를 차단하기 전에 runloop로 제어를 반환하여 업데이트 할 수있는 기회를 제공합니다 :

- (void)ButtonTouch{ 

[activityIndicator startAnimating]; 
    /*get the login result*/ 
    loginXMLDealer *loginxmldealer = [[loginXMLDealer alloc] init]; 
    loginxmldealer.username = usernameField.text; 
    loginxmldealer.password = passwordField.text; 
    [loginxmldealer loginResult]; 
    [activityIndicator stopAnimating]; 
    if ([loginxmldealer.rspCode isEqualToString: @"0001"]) { 

     UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Please check your passport." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [errorAlert show]; 
     [errorAlert release]; 
    } 
    else { 
     [self presentModalViewController:self.dataMainController animated:YES]; 

    } 
    [loginxmldealer release]; 
} 
+0

이미 가지고있는 코드를 알려주십시오. 그런 다음 우리는 당신이해야 할 일/변경/추가/삭제할 것을 도울 수 있습니다. –

+0

확인. 이미 내 질문을 편집했습니다. 감사합니다. – Solskjaer

답변

1

당신이 뭔가를 할 수 있습니다. 작업에 따라 백그라운드 스레드 또는 Grand Central Dispatch를 대신 사용하여 나머지 UI가 차단되지 않도록하고 사용자에게 프로세스 취소 옵션을 제공 할 수 있습니다 (이는 불가능합니다). 위의 간단한 접근법).

+0

애니메이션이 작동하려면 배경 스레드 또는 GCD에서 처리해야합니다. 이 코드는 나타나게하지만 움직이지는 않습니다. – ughoavgfhw

+0

UIActivityIndicator는 애니메이션에 배경 스레드 자체를 사용하기 때문에 애니메이션으로 나타납니다. – omz

관련 문제