2012-05-03 1 views
0

다음보기 컨트롤러가 "데이터로드 중"이라는 것을 사용자에게 경고해야하는 상황이 있습니다. 경고보기를 삽입했지만 작동하지 않습니다.

은 내가 FirstViewController 버튼 액션이 추가 : 그것은 작동하지 않습니다

- (IBAction)showCurl:(id)sender { 
    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Please Wait" message:@"Acquiring data from server" delegate:self cancelButtonTitle:@"OK!" otherButtonTitles:nil]; 
    [alert show]; 
    SecondViewController *sampleView = [[SecondViewController alloc] init]; 
    [sampleView setModalTransitionStyle:UIModalTransitionStylePartialCurl]; 
    [self presentModalViewController:sampleView animated:YES]; 
} 

. SecondViewController에로드되고 SecondViewController가로드 된 후에 만 ​​팝업됩니다.

그래서 SecondViewController 자체에서 시도했습니다. SecondViewController는 원격 서버에서 데이터를 추출하여 인터넷 연결에 따라 다운로드하는 데 시간이 걸릴 수 있습니다. 그래서 함수에 UIAlertView를 추가하기로 결정했습니다.

이 방법도 효과가 없습니다. 그리고 두 번째 경고가 인터넷에 연결되어 있지 않음을 사용자에게 알려주기 위해 인터넷 연결을 해제하려고 시도했습니다. 두 번째 경고가 작동하지 않습니다.

+0

왜 'UIActivityIndicatorView'를 사용하지 않으시겠습니까? 사용자 친화적입니다. – sooper

+0

어떻게 안내 할 수 있습니까? –

답변

1

질문의 첫 번째 부분에 대해 UIAlertViewUIAlertView 메서드는 현재 스레드를 차단하지 않으므로 실행이 계속되고 예상 한 동작이 예상됩니다. 당신이해야 할 일은 UIAlertViewDelegate의 메소드 중 하나를 구현하고 경고의 delegate 속성을 self으로 설정하는 것입니다. 따라서 알림이 해제되면 SecondViewController을 표시 할 수 있습니다. 두 번째 부분에 대한


다음 당신이 다시 표시되지 경고 정상 당신이 당신의 qBlock 방법은 백그라운드 스레드에서 실행가 발생하는 경우 - UI가 실행되는 위치를 메인 스레드에서 경고를 표시해야합니다 . 이렇게하려면 else 성명을 다음으로 변경하십시오.

else 
{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"ALERT" message:@"Internet Connection cannot be established." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alert show]; 
    }); 
} 

희망이 있습니다.

+0

첫 번째 방법은 어디에서 구현합니까? FirstViewController의 SecondViewController에서? –

+0

FirstViewController에서 show 메소드는 UIAlertView를 보여 주어야하며, 경고보기가 닫히면 (UIAlertViewDelegate 메소드를 구현하고 경고의 위임을 self로 설정하여이를 catch 할 수있다) SecondViewController를 초기화하고 제시한다. – graver

+0

내가 취소 버튼을 설정할 때 얻을 수있는 것. 하지만 내가 원하는 것은 취소 버튼이 없다는 것입니다. 경고 메시지를 보여 주기만하면됩니다. –

관련 문제