Monday, February 27, 2012

Can"t do mathematical operations with int from NSUserDefaults


i have integer data, stored in NSUserDefaults, there is my code:




- (IBAction)addButton:(id)sender {
NSInteger oldValue = [[NSUserDefaults standardUserDefaults] integerForKey:@"myValue"];

NSString *string1=[addTextField text];
int add = [string1 floatValue];
int new = globalCalories;
int old=oldValue;

if(recomended.text==[NSString stringWithFormat:@"%i", oldValue]){
**self.day = (int)roundf(old-add);
dayLeft.text=[NSString stringWithFormat:@"%d", oldValue-add];
}**

else
{
self.day=(int)roundf(new-add);
dayLeft.text=[NSString stringWithFormat:@"%d", day];
}
}



I copied all of button action code, just in case, but i did mark with bold strings of code, that appear to not work. So, it suppose to do mathematical operations with stored data (oldValue), but when i launch programs, it dosnt, in fact, it does, but instead of valid value program "think" that oldValue is 0 (instead of valid value).



So, when it contain, for example, number 2000, and I launch program and enter in text field 500, it suppose to be 1500 (2000-500), but it shows -500.

2 comments:

  1. The problem is that == compared the address es of the NSString and not their values (see many SO questions). To compare strings use the isEqualToString: method.

    However in this case it would be even better to compare the numbers ie convert recomended.text to the number and use a intValue method on dayLeft.

    ReplyDelete
  2. You can convert recommended.text to integer by using this:
    int recommendedValue = [recommended.text intValue];
    then compare the numbers.

    ReplyDelete