2013-05-26 77 views
0

在我的應用程序中,用戶在一個視圖中有多個輸入字段用於貨幣值。因此,根據區域設置,字段中的值應該顯示爲「$ 5.00」。這工作。iOS:NumberFormater,即使沒有貨幣符號,也會獲得雙倍的價值?

爲了編輯字段,我基本上在用戶輸入一個值並刪除貨幣符號時將字符串「Unlocalize」。編輯之後,值應該保存(當然也沒有貨幣符號)爲核心數據。由於所有字段都需要以不同方式保存到數據庫中,因此我必須通過doverwrite所有核心數據值的所有字段。所以我必須「將我的觀點的所有領域」取消本地化以拯救它們。這適用於除編輯之外的所有文本字段。如果我將這個已經非本地化的值發送給我的方法,它只返回0.爲什麼?

我的視圖控制器的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]; 
} 

回答

1

當textFieldDidEndEditing被稱爲是在未本地化正在編輯的文本字段中的值。我認爲你沒有在本地化所有字符串之前本地化編輯的值。在編輯的字符串上調用getUnlocalized將返回0,因爲字符串不是貨幣形式。

因此您didEndEditing應該是這樣的 -

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