2011-03-07 4 views
3

두 개의 개체와 float를 매개 변수로 사용하는 정적 메서드가 있습니다. 객체는 모두 정상이지만 부동 변수는 손실됩니다. 다음은 테스트 사례입니다.Objective-C 정적 메서드 문제

+ (void) someFunctionWithSomething: (xmlNodePtr *) node { 
    CGFloat fsize = 0; 
    if (fsize == 0) { 
    fsize = 15.0f; 
    } 

    NSLog (@"size1: %f", fsize); // output is 15.00000 
    [MyClass getFontWithSize: fsize]; 
} 

+ (void) getFontWithSize: (CGFloat) fsize { 

    NSLog (@"size2: %f", fsize); // output is 0.00000 
} 

어떻게 내 변수가 갑자기 0이 되었습니까? 이것은 정적 메서드 내에서 정적 메서드를 호출한다는 사실과 관련 될 수 있습니까? 나는 이것이 내가 여기에서 빠져있는 정말로 단순한 무엇인가라는 느낌을 가지고있다. 아이디어? 헤더 파일은 또한 당신의 정의와 일치 getFontWithSize에 대한 프로토 타입을 가지고

+1

오류의 원인이되는 실제 코드입니까? 두 개의 객체와 float을 사용하는 메소드가 있지만 하나의 객체와 float을 사용하지 않는 메소드를 제공한다고합니다. –

+1

나는 기존의 [Objective-C Clarification; -/+ 및 * var] (http://stackoverflow.com/questions/406667/objective-c-clarification-and-var) 질문도 있습니다. :-) –

+0

@middaparka, 포인터를 주셔서 감사합니다. – Shade

답변

1

확인 :

+(void) getFontWithSize: (CGFloat) fsize; 

어쩌면 당신이 거기에 다른 무언가가있다.

+1

감사합니다. 나는 헤더 정의를 건너 뛰는 것이 그런 비참한 결과를 가져올 수 있다는 것을 몰랐다. 답변 해 주셔서 감사합니다 :) – Shade

+1

@Shade : 이전에 무시한 경고는 "정의되지 않은 서명이있는 메소드는 ID를 반환하고 인수로 간주됩니다"라고 말했습니까? 중요한 것은 코드가 입력에 대한 포인터 레지스터 (부동 소수점 레지스터가 아닌)를보고 포인터로 해석한다는 의미입니다. –

+0

@ Gramham Lee, 알겠습니다. 문제는 내가 Obj-C 초보자이고 500 개 이상의 컴파일 경고가있는 매우 큰 프로젝트 (185 개 클래스)로 작업하고 있다는 것입니다. 대부분의 코드는 제 것이 아니므로 경고에주의를 기울이지 않았습니다. – Shade