2011-11-28 1 views
0

이 코드는 내가 만든 단추를 누를 때 "잘못된 선택기"오류가 발생합니다. test 함수는 어디에서 가져온 것입니까?버튼의 동작으로 인해 "잘못된 선택기"가 작동을 멈 춥니 다 - 왜요?

Main.m

mainScreen = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 768, 1024)]; 
[self.view addSubview:mainScreen]; 

TaskButtons *tB = [[TaskButtons alloc] init]; 
[mainScreen addSubview:[tB TaskStart]]; 

TaskButtons.m test 함수가 호출되지 않는 것 같다

- (UIButton*)TaskStart { 
    CGRect buttonFrame = CGRectMake(500, 206, 400, 35); 
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
    button.frame = buttonFrame; 
    [button setTitle:@"Task Button" forState:UIControlStateNormal]; 
    button.backgroundColor = [UIColor clearColor]; 
    button.titleLabel.textAlignment = UITextAlignmentLeft; 
    button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; 
    [button setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal]; 
    [button addTarget:self action:@selector(test) forControlEvents:UIControlEventTouchUpInside]; 
    return button; 
} 

- (void)test{ 
    NSLog(@"test line"); 
} 

. 버튼의 targetself으로 설정하지 않으면 이라는 함수에 대해 TaskButtons 클래스를 찾아야합니다.

+2

유효하지 않은 선택자 메시지의 텍스트를 포함하십시오. 이렇게하면 실제 메시지가 전송되는 개체를 알 수 있습니다. – jrturton

+0

셀렉터가 호출되기 전에 너무 빨리 인스턴스화 된 객체를 해제하려고 시도하는 것이 ARC라는 것을 알게되었습니다. TaskButtons.m을 Main.h 및 TaskButtons * tB로 가져 오면; 인터페이스에서. 그런 다음 @property (nonatomic, retain)로 속성에 보유하십시오. TaskButtons * tB; 인스턴스화 된 클래스는 ARC가 클래스를 너무 빨리 릴리스하지 않고도 셀렉터를 호출 할 수있을만큼 길게 유지할 수 있습니다. –

+1

'test'는 메소드가 아니라 함수입니다. – Macmade

답변

0

문제는 ARC가 인스턴스화 된 개체를 너무 빨리 릴리스한다는 것입니다. 그래서 이것을 해결하기 위해서는 더 오래 유지해야합니다.

Main.h

#import "TaskButtons.m" 
@interface ViewController : UIViewController { 
    TaskButtons *tB; 
} 

@property (nonatomic, retain) TaskButtons *tB; 
0
[button addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside]; 

- (void)test:(id)sender{ 
NSLog(@"test line"); 
} 

구문 문제 : 코드에서 다음 줄을 교체합니다.

관련 문제