2013-03-31 4 views
0

나는 내 자신의 인터벌 훈련 타이머를 프로그램하려고합니다. 이제는 UIStepper 컨트롤의 값을 읽는 데 문제가 있습니다.은 UIStepper의 값을 읽을 수 없습니다.

지금까지 작동하는 UIStepper 컨트롤러를 통해 int를 설정했습니다.

- (IBAction)stepperChange:(id)sender { 

// converting double to int 
int temp = [[NSNumber numberWithDouble:[(UIStepper *)sender value]] intValue]; 

NSLog(@"stepper was pressed. Current values is %d", [[NSNumber numberWithDouble:[(UIStepper *)sender value]] intValue]); 

self.intervalSeconds.text = [NSString stringWithFormat:@"%i", [[NSNumber numberWithDouble:[(UIStepper *)sender value]] intValue]]; 

mainInt = [[NSNumber numberWithDouble:[(UIStepper *)sender value]] intValue]; 

} 

지금까지는 그렇게 좋았습니다. 문제는 그 타이머가 0에 도달하자마자 UISteppers 값으로 재설정하고 싶다는 것입니다.하지만 (ID) 발신자없이 steppers 값을 직접 읽으려고하면 항상 0의 값을 얻습니다.

예를 들어, 나는 그냥 바보 같은 초보자의 실수 추측

-(void)readStepperValue { 

NSLog(@"Read UIStepper control value: %f", [intervalStepper value]); 

} 

...


가 좋아, 난 그냥 슈퍼 간단한 테스트 응용 프로그램을 만든 이 코드는 다음과 같습니다

vierContro ller.h :

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController { 

IBOutlet UIStepper *stepper; 
IBOutlet UILabel *stepperValue; 
} 

@property (nonatomic, strong) UIStepper *stepper; 
@property (nonatomic, strong) UILabel *stepperValue; 

- (IBAction)showStepperValue; 

@end 

viewController.m :

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 
@synthesize stepper, stepperValue; 

- (IBAction)showStepperValue { 
int temp = stepper.value; 
stepperValue.text = [NSString stringWithFormat:@"%i", temp]; 
[self showValue]; 
} 


- (void)showValue { 
int temp = stepper.value; 
NSLog(@"stepper.value: %i", temp); 
} 


- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning 
{ 
[super didReceiveMemoryWarning]; 
// Dispose of any resources that can be recreated. 
} 

@end 

라벨이 IBAction를 메소드 내에서 제대로 업데이트됩니다. 하지만 IBAction 내에없는 별도의 메서드 (showValue)를 호출하면 컨트롤러의 값을 읽을 수 없습니다. ...

+0

IB의'intervalStepper' 인스턴스 변수와 액션을 연결 했습니까? –

+0

스테퍼 컨트롤러를 IBAction에 연결했습니다. 그러나 컨트롤러의 가치를 읽는 것은 IB와 아무런 관련이 없습니다. 맞습니까? –

+0

코드를 올바르게 이해한다고 가정하면'-readStepperValue'에서'intervalStepper'라는 UIStepper 인스턴스 변수를 읽는 것처럼 보입니다. 이것이 프로그램 적으로가 아니라 IB로 만든 UIStepper를 가리 키기위한 것이라면, 인스턴스 변수를 IBOutlet으로 선언하고 연결해야합니다. –

답변

0

대신이 방법을 사용해보십시오.

viewController.h :

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController 

@property (nonatomic, strong) IBOutlet UIStepper *stepper; 
@property (nonatomic, strong) IBOutlet UILabel *stepperValue; 

- (IBAction)showStepperValue; 

@end 

viewController.m :

#import "ViewController.h" 

@implementation ViewController 

- (IBAction)showStepperValue { 
    double temp = self.stepper.value; 
    self.stepperValue.text = [NSString stringWithFormat:@"%f", temp]; 
    [self showValue]; 
} 

- (void)showValue { 
    double temp = self.stepper.value; 
    NSLog(@"self.stepper.value: %f", temp); 
} 

@end 

는 인스턴스 변수를 제거하기 만 속성에 의존뿐만 아니라 당신이 작성해야하는 코드의 양을 줄인다, 또한 iVar/속성 바인딩 실수를 제거하는 데 도움이됩니다.

업데이트 : self.stepper.value는 int가 아닌 double입니다 (하지만 문제는 아닙니다).