2009-09-11 2 views
0

창에 NSSlider (슬라이더)와 NSLabel (레이블)이 있습니다. 슬라이더의 값이 변경 될 때마다 레이블을 업데이트하는 클래스 "Controller"도 있습니다.컨트롤러 생성자로 UI 요소 업데이트

슬라이더의 기본 위치는 0.5입니다. Controller의 생성자가 프로그램 시작시 레이블을 업데이트하는 위치를 얻으려고합니다.

다음은이를 수행하기위한 구현 파일입니다. 프로그램을 시작할 때 라벨이 항상 0 인 것을 제외하고는 모든 것이 잘 작동합니다.

@implementation Controller 
{ 

} 

-(id)init 
{ 
    NSLog(@"initializing..."); 
    [self updateLabel];  
    return self; 
} 

- (IBAction)sliderChanged:(id)sender 
{ 
    [self updateLabel]; 
} 

- (void)updateLabel 
{ 
    label.text = [NSString stringWithFormat:@"%.1f", slider.value]; 
} 

@end 

콘솔에 "초기화 중 ..."이라는 텍스트가 표시되지만 레이블이 업데이트되지 않습니다. 내가 뭘 놓치고 있니?

답변

2

컨트롤러 초기화하기 할 수있다 (? [super init]에 전화가), 그러나 그것은 출구가 준비해 놓은 것을 의미하지 않습니다. 적절한 방법은 viewDidLoad, windowDidLoad 또는 awakeFromNib 메서드를 사용하는 것입니다.

+0

awakeFromNib을 구현하는 것이 트릭입니다. 감사! IB 컨트롤에 대한 일반적인 관행입니까? 개체를 초기화 할 때 항상 [super init]을 호출합니까? 비슷합니다 : base() in C#? 나는 obj-c에 아주 새로운 것이다! – bufferz

+1

'awakeFromNib'는 nib 파일에서 인스턴스화 된 객체에서 자동으로 호출되는 메서드이므로 UI의 초기 값을 설정하기에 좋습니다. '[super init]'에 관해서는 다음 질문을 확인하십시오 : http://stackoverflow.com/questions/1341734 –