2012-09-17 2 views
43

나는 내 응용 프로그램에서이 충돌이 발생하는 이유를 알아 내려고하고 있습니다.iOS6의 UIAlertView에서 EXC_BAD_ACCESS 코드 2

- (void) myMethod 
{ 
    UIAlertView *alertview = [[[UIAlertView alloc]initWithTitle:@"Title" message:@"message" delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil] autorelease]; 
    alertview.tag = 1 
    [alertview show]; 
} 

:

그것은 ios5.1과 시뮬레이터에서 실행 엑스 코드 4.4에서 완벽하게 잘 작동하지만 내가 엑스 코드 4.5 iOS6의로 전환 할 때 내가 여기 EXC_BAD_ACCESS 코드 2.납니다 내 코드입니다 이것은 [UIAlertView show] 라인에 EXC_BAD_ACCESS 코드 2를 부여합니다.

아이디어가 있습니까?

감사합니다.

답변

126

나는 그것을 얻었습니다. 동일한 문제가 있습니다. 제 경우에는 메서드가 백그라운드에서 던져진 것처럼 보입니다. (현재 ios7에서, ios6에서는 UIAlertView가 @nodepond가 -thanks라고 말하면 자동으로 메인 스레드에 삽입됩니다!)

방법은 메인 스레드에서 표시되는 것을 보장하기 위해 노력 :

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

행운을 빕니다!

+4

좋은 디버깅 기술! 명확하게 일했다 –

+3

나는 단지이 충돌이 애플 리케이션이 시작될 때 일어난다 고 덧붙이고 싶다. 만약 사용자가 집에 돌아와서 돌아 오면, 경고보기는 충돌을 일으킬 것이다. performSelectorOnMainThread를 수행하면 ... Eva에서 제안한대로 수정됩니다. – Tommy

+0

좋습니다! 이것은 나를 도왔고 내 문제를 해결했습니다! – Patrik

0

2014 년에도 나에게 일어난 일입니다. 문제는 이미 출시 된 개체를 사용하고 싶습니다.

내가 뭘 잘못했는지

:

올바른 방법은 무엇
//class B with UIAletViewDelegate 

-(void) showAlert{ 
UIAlertView * alert = [[UIAlertView alloc] initWithTitle bla bla...]; 
[alert show]; 
} 


//class A 
viewDidLoad{ 
MyClassB *B = [[B alloc] init]; 
[B showAlert]; 
} 

:

//Class A 
@implementation A{ 
    ClassB *B; 
} 

viewDidLoad{ 
    B = [[B alloc] init]; 
    [B showAlert]; 
} 
관련 문제