2011-09-06 2 views
0

메서드를 호출하고 BOOL을 매개 변수로 전달하는 액션을 cocos2D에서 사용하고 있습니다.iPhone 용 Cocos2D에서 "캐스트없이 정수에서 포인터를 만듭니다"

나는 경고를 얻을 : "의 인수 3 전달 'actionWithTarget : 선택 : 데이터를'캐스트없이 정수에서 포인터를 만든다"내가 해봤

id actionCharacterReaction = [CCCallFuncND actionWithTarget:self selector:@selector(characterReaction : data:) data:flipChar]; 

:

id actionCharacterReaction = [CCCallFuncND actionWithTarget:self selector:@selector(characterReaction : data:) data:(BOOL)flipChar]; 
이 라인

내 방법은 다음과 같습니다

-(void) characterReaction:(id)sender data:(BOOL)flipChar { 
    *code stuff inside* 
} 

여전히 잘 작동하는 것 같다. 나는 그 경고에 짜증이 난다. 어떤 아이디어?

답변

5

flipCharNSNumber에 랩핑하여 제대로 참조로 전달해야합니다. 선택기를 사용할 때 기본 유형을 직접 전달할 수 없습니다.

id actionCharacterReaction = [CCCallFuncND actionWithTarget:self 
           selector:@selector(characterReaction : data:) 
            data:[[NSNumber numberWithBool:flipChar] retain]]; 
... 

-(void) characterReaction:(id)sender data:(NSNumber*)flipChar { 
    BOOL fc = [flipChar boolValue]; 
    *code stuff inside* 
    [flipChar release]; //Retained in call to CCCallFuncND 
} 

편집 : 그것은 void* 소요 같이 간단히 문서를보고 후이 보인다. 은 Objective-C 개체뿐만 아니라 모든 개체가 될 수 있으므로 수동으로 해당 숫자를 유지하고 릴리스해야 할 가능성이 높습니다. 위 코드가 업데이트되었습니다.

+0

, 당신을 감사 그것이 잘 작동합니다! – VagueExplanation

0

문제는 characterReaction:data: 방법과 관련이 없으며 actionWithTarget:selector:data 방법을 사용해야합니다.

당신은 BOOL을 data: 인수로 전달하고 있지만이 메서드는 포인터가 있어야합니다 (선언의 길이는 void *). 그 방법을 따라야합니다. 객체를 전달하고 메소드가 객체를 허용하도록하십시오.

0

arg는 객체를 예상하고 BOOL은 간단한 값 유형입니다. BOOL을 효과적으로 전달하려면 지정한 선택기를 호출하는 과정의 일부로 BOOL으로 다시 변환 될 개체를 만들어야합니다. BOOL으로 변환 할 때 YES을 나타내는 값이 있고 그 값이 NO 인 경우 nil 인 개체를 만들어야합니다. 당신은 YES에 대한 NSNumber을 만들 수 있습니다

id actionCharacterReaction = [CCCallFuncND actionWithTarget:self selector:@selector(characterReaction : data:) data:(flipChar ? [NSNumber numberWithBool:YES] : nil)];

관련 문제