2011-04-27 4 views
2

몇 가지 코드를 추가하여 어느 시점에서 새 스레드를 시작한 다음 해당 스레드로부터 경고를 표시하기 전까지는 잘 작동하는 간단한 응용 프로그램이 있습니다. 이제 알림을 표시하는 코드가 부딪 칠 때마다 앱이 중단됩니다.여러 스레드의 경고와 같은 UI 요소 표시

UIAlertView * addAlert = [[UIAlertView alloc] initWithTitle:@"New alert" 
message:@"Example alert" 
delegate:nil 
cancelButtonTitle:@"Cancel", otherButtonTitles:@"OK", nil]; 
[addAlert show]; 
[addAlert release]; 

내 질문은 : iOS에서 여러 스레드의 알림과 같은 UI 요소를 표시 할 수 있습니까?

답변

4

주 스레드가 아닌 다른 스레드에서 경고 (또는 UI 관련 내용)를 표시하고 싶지는 않을 것입니다. 함수에 경고 코드를 넣고 performSelectorOnMainThread 호출 중 하나를 호출하는 것이 좋습니다.

- (void) showAlert 
{ 
    UIAlertView * addAlert = [[UIAlertView alloc] initWithTitle:@"New alert" 
     message:@"Example alert" 
     delegate:nil 
     cancelButtonTitle:@"Cancel", otherButtonTitles:@"OK", nil]; 
    [addAlert show]; 
    [addAlert release]; 
} 

// ... somewhere in the worker thread ... 
[self performSelectorOnMainThread:@selector(showAlert) withObject:nil waitUntilDone:NO]; 
2

메인 스레드가 UI 인식/화면 그리기 작업을 처리하는 유일한 스레드 여야합니다. 내가 귀하의 위치에 있다면 KVO 통지를 사용하거나 일부 클래스가 구독하는 프로토콜을 구현하는 것입니다. 프로토콜 경로를 살펴보면 코드의 경고 부분에 해당 스레드가 해당 프로토콜 메서드를 호출하기 만하면 구독 클래스가 트리거되어 대리 클래스가 경고를 받고 해당 뷰에있는 내용을 주 스레드.

희망이 있습니다.

0

alertView를 사용하여 performSelectorOnMainThread 메소드를 호출하는 것이 더 간단하고 간단합니다. 귀하의 경우에는 그것은 주 스레드에서 Alertview의 쇼 메소드를 호출

[addAlert performSelectorOnMainThread:@selector(show) withObject:nil waitUntilDone:YES]; 

대신

[addAlert show]; 

의이 줄을 시도합니다. 추가 방법을 쓸 필요가 없습니다.

관련 문제