2011-08-30 5 views
0

obj-c에서 float 매개 변수를 전달하려고하면 매우 이상한 문제가 발생합니다. 내가 디버거, 부동 소수점을 통해이 프로그램을 실행할 때float를 전달하면 가비지 값이 발생합니다.

- (void)presetChanged:(NSNotification*)notification { 

float newValue = [[S76PresetManager sharedManager] getValueForKey:symbol]; 

[self setValue:newValue animated:YES]; 
[PdBase sendFloat:newValue toReceiver:symbol]; 
} 

은 (예를 들어 0.5)가 동일하게 유지되고 전송받을 :

가 나는 NSNotification를 통해 호출하는 방법이 [PdBase sendFloat을 :] 선. 그러나 [self setValue : animated :] 호출에서 쓰레기 값은 3.68934881e + 19가됩니다. 이것은 매우 이상합니다. 어떤 제안? 당신은 때로 믿을 가정하면, 또 다른 방법으로 전송하기 전에 확인 어떤 경계를하고 ...

- (void)setValue:(float)newValue animated:(BOOL)animated { 
float oldValue = value; 

if (newValue < 0.0) 
    value = 0.0; 
else if (newValue > maxValue) 
    value = maxValue; 
else 
    value = newValue; 

[self valueDidChangeFrom:oldValue to:value animated:animated]; 
    } 
+0

그리고 setValue 호출은 어떻게 생겼습니까? – Goz

+1

setValue에 대한 메서드 정의를 표시 할 수 있습니까? : animated :? – bizsytes

+0

헤더 파일은 어떨까요? (헤더에 선언되지 않았고 setValue : animated : 메소드가 나중에 presetChanged보다 소스에있는 경우 : 시그니처가 id의 인수 유형으로 기본 설정되므로 인수를 mangle 할 수 있습니다. 컴파일러에서 사용자에게 경고해야하지만 케이스 ...) –

답변

1

에 무슨 일이 벌어지고 특별한 아무것도 [자기의 setValue : : : 애니메이션] 사전

편집에

감사합니다 'T는 이상한 아무것도하고 [자기의 setValue을 : NEWVALUE 애니메이션 : YES] ...

방법에 대해 :

NSNumber *newValue = [NSNumber numberWithFloat:[[S76PresetManager sharedManager] getValueForKey:symbol]]; 

[self setValue:newValue animated:YES]; 
[PdBase sendFloat:[newValue floatValue] toReceiver:symbol]; 
+0

그 덕분에, 고마워! 일종의 간단한 float 매개 변수를 전달할 수없는 이상한 일종의 ... – chmod

+1

setValue :에 대해 선언 된 유형이 (id) 또는 (NSNumber *) 인 경우 원시 플로트 값 대신 객체를 전달해야합니다. , 그리고 위의 코드가 여러분에게 도움이되었습니다. –

관련 문제