2011-03-10 2 views
1

"기다려주십시오"및 UIActivityIndicatorView와 함께 UIAlertView를 사용하고 있습니다. 나는 문제 해결 UIAlertView

{ 
    ... 
    [self performSelectorInBackground:@selector(sh) withObject:nil]; 
    //i've tried also 
    //[NSThread detachNewThreadSelector:@selector(showWaiting) toTarget:self withObject:nil]; 
    ... 
} 

- (void)showWaiting { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    [waitingAlert show]; 
    [pool drain]; 
} 

경고가 표시되면, 화면이 어두워 비활성화된다

를 사용하여 보여줍니다. 경고를 해제 할 시간이 올 때이 경고가 사라진 후 나는

[waitingAlert dismissWithClickedButtonIndex:0 animated:NO]; 

을, 그러나 때때로 (가능성은 약 5 %) 화면이 이전 어두워 및 비활성 상태로 유지. 누군가 그런 문제에 직면 해 있습니까? 감사합니다.

+0

은 "@selector (sh)"실수입니까? 위에 정의 된 'sh'메소드가 없습니다. – occulus

+0

더 많은 코드를 참조해야합니다. 어디에서 dismissWithClickedButtonIndex를 호출합니까? – occulus

답변

3

이것은 당신이 찾고있는 답변을하지 않습니다 ...하지만 그것은 "올바른"대답하고 당신에게 장기적으로 시간이 저장됩니다 : 당신은 UIAlertView를 오용하고

합니다. 진행률 표시기와 "기다려주십시오"대화 상자에는 사용하지 마십시오. 사용자가 버튼을 누르는 것으로 해산되도록 고안되었습니다. UIAlertView는 절대로 자신의 에서 사라지지 않아야합니다 (수정 : 사실, Apple의 API는이를 해지 할 수 있습니다.하지만 그런 일은 매우 신중하게 사용해야합니다.)

그런 식으로 UIAlertView를 계속 악용하는 경우 앱 스토어 제출 중에 앱이 거부되어 다른 방법으로 다시 실행해야 할 때 놀랄 필요가 없습니다.

이 질문에 대한 내 대답은 참조하십시오, 그것은 아주 사용하기 쉽습니다

Multiple AlertViews - Remove the alertview that is behind another alertview

1

으로 occulus 상태는 다음과 같이 UIAlertView 사용하지, 내가 MBProgressHUD 추천

을, 멋지다 및 설계 이 목적을 위해.

0

NSAutoreleasePool 외부에 경고를 만들고 표시하고 해제해야합니다.

... 
[NSThread detachNewThreadSelector:@selector(showWaiting) toTarget:self withObject:nil]; 
... 

을 그리고 전화는 오토 릴리즈 풀이 : 예를 들어, 백그라운드에서 전화를

- (void)showWaiting { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    [self performSelectorInMainThread:@selector(showMyAlert) withObject:nil waitUntilDone:NO]; 
    //[waitingAlert show]; 
    [pool drain]; 
} 

다음을 수행해야합니다 메인 스레드를 사용하여 경고를 표시 할 수 있습니다.

- (void)showMyAlert { 
    UIAlertView * myAlert = [[UIAlertView alloc] initWith...]; 
    [myAlert show]; 
    [myAlert release]; 
} 

자동 복구 풀 안에 경고를 표시하려고하면이 경고 메시지가 표시되면 경고 메시지가 사라집니다.

도움이 되었기를 바랍니다.