2014-10-10 4 views
0

내가 클래스 메소드 선언 : 같은 클래스에서호출 방법 계층 구조

+(int)widthScaled:(UIImage *)image maximumHeight:(int)max{ 
    int width = 0; 
    width = (image.size.width - (((image.size.height - max)*100)/image.size.height)*image.size.width)/100; 

    return width; 

} 

를, 내가 인스턴스 메서드 다음과 같이 선언한다

- (void)generarVistas{ 
    if(...){ 
     ... 
    }else{ 
     for(...){ 
       ... 
//I need to put the class method here but if I call the class method like this, don't recognize 
       int variable = [[self class] widthScaled:image maximumHeight:max]; 
... 
} 
} 

내가 클래스 메소드를 넣어 시도 인스턴스 메소드에서는 작동하지만 작동하지 않습니다. 클래스 메서드를 인식하기 위해 어떤 컨텍스트를 나타내야합니까?

+1

: 클래스가 FooClass 경우,이 양식을 사용합니다. ...? – Kampai

+0

UIViewController – PlugInBoy

+1

클래스의 정적 변수를'-viewDidLoad' 또는'-init' 메소드에 할당 한 다음이 변수를 사용하여 인스턴스 메소드를 호출하십시오 – Kampai

답변

2

직면 한 문제는 [self class]이 런타임 결과가 런타임까지 알려지지 않은 런타임 호출이라는 것입니다. 컴파일러는 어떤 클래스인지 알지 못합니다. 작성한 코드는 항상 고정 클래스에서 호출해야하므로 그렇게하지 마십시오. (. 클래스 이름으로 [self class] 교체, 예를 들어 FooClass) - NSObject의, UIViewController에, AppDelegate에,있는 UIView에서

int variable = [FooClass widthScaled:image maximumHeight:max]; 

당신이 당신의 클래스 메소드를 선언해야

+0

좋아, 나는 약간의 잘못 생각했기 때문에 코드를 다시 작성하는 데 불만을 제기합니다. [self class]는 호출해야하는 메서드가 메서드와 같은 클래스 안에 있기 때문에 호출합니다. 이제이 작업이 올바르게 수행되었습니다. widthImage = [[self class] widthScaled : imageProduct maximumHeight : maxHeight]; – PlugInBoy

+0

아니요 "[self class]"는 사용하지 마십시오. 제가 대답 할 때 말했듯이, 수업의 이름을 사용하십시오. –