Domanda

In my app a user has several input fields in one view for currency values. So depending on the locale the value in the field should be displayed like i.e. "$ 5.00". This works.

In order to edit the fields I basically "Unlocalize" the string when the user enters a value and remove the currency symbol. After editing the value should be saved (of course also without currency symbol) into core data. Since all fields need to be saved differently into the database, I have to go through all fields an doverwrite all core data values. So I have to "Unlocalize" all fields of my view in order to save them. This works for all text fields except the one that was edited. If I send this already unlocalized value to my method it just returns 0. Why?

The 2 methods of my view controller:

-(void)textFieldDidBeginEditing:(UITextField *)textField
{
    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Done", nil) style:UIBarButtonItemStyleDone target:self action:@selector(doneEditing:)];
    [self.navigationBar setRightBarButtonItem:doneButton];

    if(textField.tag != 1){
        //1 is the name text field
        textField.text = [NSString stringWithFormat:@"%.2f",[NSNumber getUnLocalizedCurrencyDoubleWithString:textField.text]];
    }
}


    -(void)textFieldDidEndEditing:(UITextField *)textField
{
    self.spendingCategory.name = self.nameTextField.text;

    self.spendingCategory.costPerDay = [NSNumber numberWithDouble:[NSNumber getUnLocalizedCurrencyDoubleWithString:self.dailyTextField.text]];
    self.spendingCategory.costPerWeek = [NSNumber numberWithDouble:[NSNumber getUnLocalizedCurrencyDoubleWithString:self.weeklyTextField.text]];
    self.spendingCategory.costPerMonth = [NSNumber numberWithDouble:[NSNumber getUnLocalizedCurrencyDoubleWithString:self.monthlyTextField.text]];
    self.spendingCategory.costPerSemiYear = [NSNumber numberWithDouble:[NSNumber getUnLocalizedCurrencyDoubleWithString:self.semiAnnuallyTextField.text]];
    self.spendingCategory.costPerYear = [NSNumber numberWithDouble:[NSNumber getUnLocalizedCurrencyDoubleWithString:self.annuallyTextField.text]];

    [self setTextFieldsWithFormat];
}

And my NSNumber category:

   - (NSString *) getLocalizedCurrencyString
{
    NSNumberFormatter *numberFormatter =[[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

    NSString *numberString = [numberFormatter stringFromNumber:self];
    return numberString;
}

+ (double) getUnLocalizedCurrencyDoubleWithString:(NSString *)currencyString
{
    NSNumberFormatter *numberFormatter = [[NSNumberFormatter alloc] init];
    [numberFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];

    return [[numberFormatter numberFromString:currencyString] doubleValue];
}
È stato utile?

Soluzione

When textFieldDidEndEditing is called the value in the text field that is being edited in unlocalized. I think you are missing the cal to localize the edited value before unlocalizing all strings. Calling getUnlocalized on the edited string is going to return 0 as the string is not in currency style.

Therefore your didEndEditing should look like this -

-(void)textFieldDidEndEditing:(UITextField *)textField
{
    self.spendingCategory.name = self.nameTextField.text;

    // First localize the current string that is being edited
    textField.text = [[NSNumber numberWithDouble:[textField.text doubleValue]] getLocalizedCurrencyString];

    // Now all of the strings are localized. Unlocalize and store them
    self.spendingCategory.costPerDay = [NSNumber numberWithDouble:[NSNumber getUnLocalizedCurrencyDoubleWithString:self.dailyTextField.text]];
    self.spendingCategory.costPerWeek = [NSNumber numberWithDouble:[NSNumber getUnLocalizedCurrencyDoubleWithString:self.weeklyTextField.text]];
   self.spendingCategory.costPerMonth = [NSNumber numberWithDouble:[NSNumber getUnLocalizedCurrencyDoubleWithString:self.monthlyTextField.text]];
self.spendingCategory.costPerSemiYear = [NSNumber numberWithDouble:[NSNumber getUnLocalizedCurrencyDoubleWithString:self.semiAnnuallyTextField.text]];
   self.spendingCategory.costPerYear = [NSNumber numberWithDouble:[NSNumber getUnLocalizedCurrencyDoubleWithString:self.annuallyTextField.text]];

  [self setTextFieldsWithFormat];
} 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top