2011-09-13 2 views
1

나는 "... unrecog"많이 예외에 대한 문제가 무엇인지에 대해 읽어하지만 난 뭔가 다른iOS 대상 개체가 이미 NULL 인 경우 예외를 인식하지 못하는 셀렉터를 인스턴스로 보내는 방법?

나는 두 개의 버튼과 전망이 필요합니다 시작 및 삭제, 또한 내가 두 UILabels 있습니다 oneLabel 및 secondLabel

그래서 I의 버튼을 누르면 내가 NSOperation 스레드가

를 시작 시작 시작 그리고 나는 그에게

는 메인 루프에 레이블이 내가

를 사용하여 텍스트를 변경하는 PARAMS 같은 라벨 (oneLabel, secondLabel를) 제공

모두 잘 작동하지만 내가 버튼을 누릅니다 삭제 - 그것은 내가 예외 무엇을 얻을 후,

secondLabel=nil; 

그럼 방법

[secondLabel removeFromSuperview] 

로보기에서 secondLabel를 삭제합니다. 나는 그것이 일어난 이유를 이해한다. 왜냐하면 선택자 setText가있는 메시지에 대한 대상 객체가 없기 때문이다.

그리고 예외가 발생하고 앱이 다운됩니다.

어떻게이 예외를 잡을 수 있습니까?

내가 필요한 이유는 무엇입니까? ImageView에서 tableView 컨트롤러를 사용하면 별도의 스레드에서 이미지를로드합니다.

답변

1

이 시도.

희망, Vlad

+0

나는 그렇게한다. 그리고 나는 오류가 발생합니다. –

0

예외를 포착 할 필요가 없습니다. 선택기가 실제로 사용 가능할 때 excecute 및 catch를 기다리는 메서드를 만들 수 있습니다.

삭제를 제대로했기 때문에 secondLabel을 다시 작성해야합니다. 우선이 작업을 수행하면 예외가 catch되지 않습니다.

0

이것은 메시지를 nil (으)로 보내지 않아도 문제가되지 않습니다. 인식 할 수없는 선택기 예외는 메소드 이름에 철자가 틀린 것을 의미합니다. 일반적인 실수는 메서드에 매개 변수가 필요한 경우 콜론을 잊어 버리는 것입니다. 예를 들어 @selector (setText :)를 의미 할 때 @selector (setText).

1

setText: 개체가 아니므로 구현 방법이어야합니다. someStringsetText 메서드로 보내는 개체입니다.

[oneLabel performSelectorOnMainThread:@selector(setText:) withObject:someString waitUntilDone:YES]; 명령이 실행되면 setText 메소드가 호출됩니다. 이 방법은
-(void)setText:(id)sender가 존재하지 않거나 당신이 그것을 맞춤법이 틀린 때문에

당신은 unrecognized selector sent to instance를보고있다. 당신의 개체를 계속 사용할 경우 실행되는

id yourObject; 
    if (yourObject != nil && [yourObject respondsToSelector:@selector(yourSelector)]) { 
    // Do your stuff here 
} 

이 만 메소드를 호출 그것은을 지정된 셀렉터에 응답 :

관련 문제