0

私のアプリでは、ユーザーは通貨値の 1 つのビューに複数の入力フィールドを持っています。そのため、ロケールに応じて、フィールドの値は「$ 5.00」のように表示されます。これは機能します。

フィールドを編集するために、基本的に、ユーザーが値を入力したときに文字列を「ローカライズ」し、通貨記号を削除します。編集後、値を (もちろん通貨記号なしで) コア データに保存する必要があります。すべてのフィールドを異なる方法でデータベースに保存する必要があるため、すべてのフィールドを調べて、すべてのコア データ値を上書きする必要があります。したがって、ビューを保存するには、ビューのすべてのフィールドを「ローカライズ解除」する必要があります。これは、編集されたものを除くすべてのテキスト フィールドで機能します。この既にローカライズされていない値をメソッドに送信すると、0 が返されます。なぜですか?

私のView Controllerの2つの方法:

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

そして私の NSNumber カテゴリ:

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

1 に答える 1