2009-10-09 8 views
0

처리기 이벤트에 문제가 있습니다. 하나의 NSString 매개 변수로 핸들러를 생성해야합니다. 나는 노력하지만 작동하지 않습니다. 샘플 코드 :매개 변수가있는 이벤트 처리기

@interface Example : NSObject { 
    id target; 
    SEL action; 
} 

- (id)initWithTarget:(id)targetObject action:(SEL)runAction; 
- (void)activate; 
@end 

@implementation Example 
- (id)initWithTarget:(id)targetObject action:(SEL)runAction { 
    if (self = [super init]) { 
     target = targetObject; 
     action = runAction; 
    } 
    return self; 
} 

- (void)activate { 
    [target performSelector:action withObject:self withObject: @"My Message"]; 
} 
@end 

@interface ExampleHandler : NSObject { 

} 

-(void):init; 
-(void)myHandler:(NSString *)str; 

@end 

@implementation ExampleHandler 

-(void)init { 
    [super init]; 
    Example *ex = [[Example alloc] initWithTarget: self action: @selector(myHandler) ]; 

} 

-(void)myHandler:(NSString *)str { 
    NSLog(str); 
} 

@end 

하나의 매개 변수를 가진 처리기가있는 코드는 어떻게 변경해야합니까?

답변

2

'myHandler :'메서드는 하나의 인수 인 문자열을 사용합니다. 그러나 당신의 예에서는 두 개의 객체 인 'self'와 문자열을 전달합니다.

-(void)myHandler:(id)example string:(NSString*)str 
: 다른 한편으로는, 당신은 정말 방법으로 '자기'를 통과 같은에 myHandler가 방법을 변경하려는 경우

[target performSelector:action withObject:@"My Message"]; 

[target performSelector:action withObject:self withObject:@"My Message"]; 

을 변경해야합니다

예제에서 ExampleHandler가 Example 개체 전에 할당 해제되지 않는다는 보장이 없다면 Example은 'target'을 유지해야합니다.

+1

OP가 @selector (myHandler)를 사용했다는 점도 주목할 가치가 있습니다. 누락 된 콜론은 @selector (myHandler :)이어야합니다. –