user2152750
user2152750

Reputation: 81

Segmented Controllers

Trying to set an int value using a Segmented Controller. I've seen several tuts on how to change labels, but I need to set an int value.

#import "SecondViewController.h"

@interface SecondViewController ()

@end

@implementation SecondViewController

@synthesize caseCost;
@synthesize dilution;
@synthesize returnMsg;
@synthesize opcValue;
//synthesize opc; < -- Tried
//int opc; <--- tried



- (IBAction)opcView:(id)sender {
    if (opcValue.selectedSegmentIndex == 0) {
    int opc = 320;
    }
    if (opcValue.selectedSegmentIndex == 1) {
    int opc = 128;
    }
    if (opcValue.selectedSegmentIndex == 2) {
    int opc = 135;
    }
    if (opcValue.selectedSegmentIndex == 3) {
    int opc = 88;
    }


}


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

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



   - (IBAction)finishBtn:(id)sender {
    //int opc = 320;
    float case_cost = ([caseCost.text floatValue]);
    float dilutionValue = ([dilution.text floatValue]);
    float gpc = (opc / dilutionValue);
    float gCost = (case_cost / gpc);
    float bCost = (gCost / 4);
    float bpc = (gpc * 4);

NSNumberFormatter *formatterCur = [[NSNumberFormatter alloc] init];
NSNumberFormatter *formatterInt = [[NSNumberFormatter alloc] init];
[formatterCur setNumberStyle:NSNumberFormatterCurrencyStyle];
[formatterInt setNumberStyle:NSNumberFormatterDecimalStyle];

NSString *bottlesCost = [formatterCur stringFromNumber:[NSNumber numberWithFloat:bCost]];
NSString *gallons = [formatterInt stringFromNumber:[NSNumber numberWithInt:gpc]];
NSString *gallonsCost = [formatterCur stringFromNumber:[NSNumber numberWithFloat:gCost]];
NSString *bottles = [formatterInt stringFromNumber:[NSNumber numberWithInt:bpc]];


returnMsg.text = [NSString stringWithFormat:@"%@ gallons per case at %@ per gallon and %@      - 32 oz bottles at %@ per bottle.", gallons, gallonsCost, bottles, bottlesCost];


}

   - (IBAction)opcView:(id)sender {
    }

   @end

in the line "float gpc = (opc / dilutionValue);" is shows as an unknown value of opc, even though I think it should from the segmented controller. I'm using the segmented controller instead of Radio Buttons i've used in Java. I used the "//int opc=320" to make sure the rest of the code worked.

Upvotes: 0

Views: 81

Answers (1)

Matthew Burke
Matthew Burke

Reputation: 2364

In each of the if blocks in your method - (IBAction)opcView:(id)sender you are creating a local int variable named opc. So when execution leaves the if block, the local variable disappears. Thus, in - (IBAction)finishBtn:(id)sender there is no variable named opc in scope.

You should declare opc to be a property as well. You will set this property when the segment control changes selection. Later, you can read the property's value in your finish button's handler.

#import "SecondViewController.h"

@interface SecondViewController()
@property (nonatomic) int opc;
@end


@implementation SecondViewController

// this method is wired to the segment control's UIControlEventValueChanged event
- (IBAction)opcView:(id)sender 
{
  if (opcValue.selectedSegmentIndex == 0) {
    self.opc = 320;
  }
  if (opcValue.selectedSegmentIndex == 1) {
    self.opc = 128;
  }
  if (opcValue.selectedSegmentIndex == 2) {
    self.opc = 135;
  }
  if (opcValue.selectedSegmentIndex == 3) {
    self.opc = 88;
  }
}

- (IBAction)finishBtn:(id)sender 
{
  float case_cost = ([caseCost.text floatValue]);
  float dilutionValue = ([dilution.text floatValue]);
  float gpc = (self.opc / dilutionValue);

  // lots more code
}

Upvotes: 1

Related Questions