2013-03-31 1 views
0

J'essaie de programmer mon propre minuteur d'entraînement par intervalles. Maintenant, j'ai un problème avec la lecture de la valeur d'un contrôle UIStepper.ne peut pas lire la valeur d'un UIStepper

Je définis un int sur le contrôleur UIStepper, qui fonctionne jusqu'à présent.

- (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]; 

} 

jusqu'ici tout va bien. le problème est, que je veux réinitialiser la minuterie à la valeur UISteppers dès qu'il atteint 0. Mais quand j'essaie de lire la valeur de Steppers directement sans l'expéditeur (id), j'obtiens toujours la valeur de 0.

par exemple

-(void)readStepperValue { 

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

} 

Je suppose que c'est juste une erreur stupide débutants ...


Ok, je viens de faire une application de test super simple, le code ressemble à ceci:

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 

L'étiquette est mis à jour correctement à partir de la méthode IBAction. Mais quand j'appelle une méthode séparée (showValue), qui n'est pas dans l'IBAction, elle ne peut pas lire la valeur du contrôleur ....

+0

Avez-vous connecté la variable d'instance 'intervalStepper' dans IB, ainsi que l'action? –

+0

J'ai connecté le contrôleur pas à pas à l'IBAction. mais lire la valeur du contrôleur n'a rien à voir avec l'IB, n'est-ce pas? –

+0

En supposant que je comprenne bien le code, dans '-readStepperValue', il semble que vous essayez de lire à partir d'une variable d'instance UIStepper appelée' intervalStepper'. Si cela est destiné à pointer vers un UIStepper que vous avez créé dans IB (plutôt que par programmation), il doit également être connecté à IB: déclarez la variable d'instance en tant que «IBOutlet» et connectez-la. –

Répondre

0

Essayez plutôt cette méthode.

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 

Se débarrasser des Ivars et reposant uniquement sur les propriétés non seulement réduit la quantité de code que vous devez écrire, mais permet également de supprimer toutes les erreurs de liaison iVar/propriété. MISE À JOUR: self.stepper.value est un double pas un int (mais ce n'était pas votre problème).