2010-07-19 5 views
1

float 매개 변수를 사용하여 메서드를 호출하려고 시도하지만이 메서드가 가져 오는 값이 내가 보낸 것이 아닙니다. 여기 메서드에 매개 변수를 전달할 때 문제가 발생합니다.

direcao = dirRadianos * 180/M_PI; // direcao = The value I send 

NSLog(@"Value Sent: %f", direcao); // Log what I'm sending 

for (CCNode *child in super.children) if([child respondsToSelector: @selector(setFaceDirection:)]) [child setFaceDirection: direcao]; 

메소드에 대한 코드이다 :

; 여기

통화에 대한 코드 (실제 통화가 마지막 행의 마지막 부분 [direcao 자식 setFaceDirection] 임)이고 여기
-(void) setFaceDirection: (float) angle { 
    NSLog(@"Value Recieved: %f", angle); 
    [theSprite setRotation: - angle ]; 
} 

플로트 변수 direcao 여기

@interface PersControlNode : CCNode <CCTargetedTouchDelegate> { 
      // ... 
     float direcao; 
      // ... 

} 
// ... 
@end 

선언이다 NSLog로부터 출력된다 :

Value Sent:  -16.699266 
Value Recieved: 0.000000 
Value Sent:  -16.699301 
Value Recieved: 36893488147419103232.000000 
Value Sent:  -16.699625 
Value Recieved: -0.000000 
Value Sent:  48.366463 
Value Recieved: 2.000000 
Value Sent:  48.366451 
Value Recieved: -36893488147419103232.000000 
Value Sent:  48.366428 
Value Recieved: 0.000000 
Value Sent:  48.366444 
Value Recieved: -0.000000 
Value Sent:  14.036244 
Value Recieved: -0.000000 
Value Sent:  14.036238 
Value Recieved: -2.000000 
Value Sent:  14.036201 
Value Recieved: -36893488147419103232.000000 
Value Sent:  14.036191 
Value Recieved: -0.000000 
Value Sent:  14.036273 
Value Recieved: 36893488147419103232.000000 
Value Sent:  12.528809 
Value Recieved: 0.000000 
Value Sent:  12.528766 
Value Recieved: 36893488147419103232.000000 
Value Sent:  12.528852 
Value Recieved: -2.000000 
Value Sent:  12.528863 
Value Recieved: 0.000000 
Value Sent:  -101.309929 
Value Recieved: -36893488147419103232.000000 
Value Sent:  -101.309860 
Value Recieved: -2.000000 

내가 뭘 잘못하고 있니? 나는 목표 C를 처음 사용합니다. 도와 주려는 사람에게 감사드립니다.

추신. float 대신 int를 사용하면 더 잘 작동하지만 그때에도 여전히 오류가 있습니다.

+1

매개 변수가 int 형의 경우 그것은 잘 작동 ...하지만 그렇다하더라도, 그 완벽하지 – Jose

답변

1

float 값을 * .m 파일에만 구현되지만 * .h 파일에는 선언되지 않은 메서드에 전달할 때도 동일한 문제가 발생했습니다.

예 :

는 메소드 호출 사용하는 경우

  • (공극) updateScreen (플로트) 값;

{ ... 은}는 그 클래스의 각각의 인터페이스 파일에 선언되어 있는지 확인합니다. "개체가 - (void) updatedScreen ....."에 응답하지 않을 수 있습니다.

내 인터페이스 파일에서 작동하지 않는 함수가 무엇이든간에 완벽하게 일했습니다.

1

나는 이것이 컴파일러 측의 자동 형 변환과 관련이 있다고 생각하지만, C에 대해 더 잘 알고있는 누군가가 그것을 설명해야 할 것이다. 문제를 해결하려면 angle 매개 변수의 형식을 double으로 변경하십시오.

+0

감사합니다 ... 나는 안녕 .. 나는 다른 방법 setFaceDirection 불렀다 – Jose

1

setFaceDirection: 다른 유형을 사용하는 다른 방법이 있습니까?

컴파일러 경고가 표시되지 않습니까?

+0

것을 시도 할 것이다 그러나 그들은 또한 수레 만에게 가져 내가 사용하는 경고는 "CCNode setFaceDirection에 응답하지 않을 수 있습니다", 마녀 사실, 그게 내가 먼저 확인 응답 thats입니다. 하지만 이제는 모두 int로 변환되었으므로 경고가 사라졌습니다. – Jose

+0

그냥 분명히 : setFaceDirection : (float) angle {..}이있는 클래스가 있습니다. 그들은 모두 부유했다. 그런 다음,이 문제로 인해 모든 것을 int로 바꿨고 (일종의) 일을합니다. 하지만 매개 변수로 float를 전달할 수 있어야합니다. 흥미로운 것은 everithing이 int 일 때 경고가 사라 졌다는 것입니다. 나는 지금까지 그것을 알아 차리지 못했다. 고마워. – Jose

0

같은 문제가있었습니다. HEADER (.h) 파일에서 인수는 int입니다. 그러나 IMPLEMENTATION-file (.m)에서 인수는 float 또는 double입니다.

@interface ... 
{} 
- (void) resizeImage:(UIImage *)imageToResize ToFitWidth:(int)max_width andHeight:(int)max_height; 


@implementation ... 
- (void) resizeImage:(UIImage *)imageToResize ToFitWidth:(float)max_width andHeight:(float)max_height { 
    NSLog(@"max_width: %f", max_width); 
    ... 

값은 항상 0.000000000이었다.

해결 방법 : HEADER (.h)에서 메서드를 선언하지 않았거나 HEADER (.h)에서 인수의 형식을 변경하는 것을 잊어 버렸을 수 있습니다. 메서드는 헤더의 인수 유형을 사용합니다.

관련 문제