2011-12-21 2 views
0

iOS 5에서 (ARC)를 사용하기 시작했지만 자주 나타나는 문제가 있습니다.메소드에 대한 컴파일러 경고가 발견되지 않거나 선언되지 않았습니다.

첫번째 경우 : 셀렉터 방법을 선언하지 않는 인스턴스 메시지

수신기 유형 '으로 UIView'

[[cell viewWithTag:999] setTextColor:[UIColor blackColor]]; 

이 광고는 문제를 일으키는 'setTextColor'.

두 번째 경우 : 선택을위한

은 알려진 바 없음 인스턴스 방법 :

[delegate setForTheFirstTime:TRUE]; 

이 줄 문제의 원인이 'setForTheFirstTime을'.

위임자를 사용할 때 이러한 문제가 많습니다.

이 두 가지 문제를 해결하려면 performSelector:과 같은 방법을 사용해야합니까?

+2

음,이 모든 것이 ARC와 어떤 관계가 있습니까? – JustSid

+1

이들 중 어느 것도 ARC 관련 문제처럼 보이지 않습니다. ARC 사용시 경고 만 시작 했습니까? LLVM으로 처음 전환 한 적이 있습니까? –

+0

당신은'viewWithTag :'호출을'UILabel *'또는 무엇이든 주조하려고 시도 했습니까? 'delegate'는'id '로 입력 되었습니까? 적절한 방법을 구현할 수도 있고 구현하지 않을 수도있는 객체에 메시지를 보내는 것과 관련된 경고를받는 것처럼 보입니다. –

답변

2

'위임'을 올바른 유형으로 선언하면 해당 유형의 헤더를 가져와야합니다. 컴파일러는 델리게이트 객체가 'setForTheFirstTime :'을 이해하고 컴파일러가 그 메소드에 대한 선언을 필요로한다는 것을 알아야합니다.

viewWithTag :가있는 첫 번째 경우 컴파일러에서 결과를 올바른 클래스에 캐스트해야 'setTextColor :'메서드에 대해 알 수 있습니다.

[(UILabel*)[cell viewWithTag:999] setTextColor:[UIColor blackColor]];

0

viewWithTag 방법은 UIView의 객체를 반환이보기 가정

는 UILabel의 것이다. 따라서 setTextColor 메서드를 호출하면 수신기는 UIView이고 UIView에는 setTextColor 메서드가 없습니다. 개체를 올바른 클래스로 캐스팅해야합니다. 여기 UILabel이 필요합니다.