2014-01-17 2 views
-3

Class1.m클래스와 대상 간의 상호 작용 방법은 무엇입니까?

#import Class2.h 

    Class2* test = [[Class2 alloc] init]; 

    UIButton* button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
    [dropButton addTarget:test action:@selector(actionPressed:) forControlEvents:UIControlEventTouchDown]; 

Class2.m는

#import Class1.h 

    -(UIButton *)actionPressed:(UIButton *)buttonPressed{ 
     NSLog(@"Test"); 
     return buttonPressed; 
    } 

응답 기능이 작동하지 않습니다와 나는 이유를 모르겠습니다. 시뮬레이션 중에 앱이 다운됩니다. 수정에 대한 조언은 크게 감사하겠습니다.

+1

현재 받고있는 충돌은 무엇입니까? 그리고 약간의 스 니펫이 아닌 모든 코드를 공유하십시오. 코드에서 버튼을 만들면 하위 뷰에 어디에 추가합니까? 프레임을 어디에서 설정합니까? 그리고 마지막으로 왜'buttonPressed'를 돌려 주나요? 이미 버튼이 있습니다. – Popeye

+0

'test '를 지역 변수로 설정했다면, 동작이 트리거되기 전에 할당이 해제 될 수 있습니다. –

+0

오류가 발생합니다 : 선언되지 않은 선택기 'buttonPressed'. 당신이 제안한 것처럼 로컬 변수 선언 일 가능성이 큽니다. 이걸 인스턴스 변수로 어떻게 바꿀까요? 그것이 Class 1 또는 Class 2의 인스턴스가 될 것입니까? –

답변

-1

test은 로컬 변수입니다. 실제 오류가 없으면 알기가 어렵지만, 그것이 잘못되었을 수도 있습니다. 인스턴스 변수로 변경해야합니다.이 경우 Class2 객체는 Class1의 할당 해제 전까지 유지됩니다.

+0

배경에 ivar를 생성하는 속성으로 변경하는 것이 더 낫습니다. – Popeye

+0

내가 볼 수있는 한,이 경우 단일 장점은 없습니다. 그러나 아마 어느 쪽도 다치게 할 수 없었다. –

+0

나는 놀이를 가지고있다. 만일 당신이 혼자서 'ivar'를 세우는 경우에는 그것을 지나치지 않을 것이다. 만약 당신이 자동차가 getters와 setters뿐만 아니라'ivar'을 생성하는 속성으로한다면, 작동 할 것이다. 또한 컨벤션은 요즘은'.h' 파일의'@ 인터페이스 '에'ivars'를 더 이상 가지지 않을 것이고, 당신은 이것을 속성으로 바꿀 것입니다. 그리고 만약 당신이'ivars'를 필요로한다면 이것들은 끝날 것입니다 'ivars'로 인한 구현에서는 요즘 클래스가 개인이나 비공개가 아니어야합니다. – Popeye