2013-05-26 1 views
0

내 앱에서 사용자는 하나의보기에 통화 값에 대한 여러 입력 필드가 있습니다. 따라서 로캘에 따라 필드의 값이 '$ 5.00'과 같이 표시되어야합니다. 이 작동합니다.iOS : 통화 기호가없는 경우에도 NumberFormater가 이중 값을 얻습니까?

필드를 편집하려면 기본적으로 사용자가 값을 입력하고 통화 기호를 제거 할 때 문자열을 "Unlocalize"합니다. 편집 후 값은 핵심 데이터로 저장되어야합니다 (물론 통화 기호도 없음). 모든 필드를 데이터베이스에 다르게 저장해야하므로 모든 필드를 거쳐 모든 핵심 데이터 값을 작성해야합니다. 따라서 내보기의 모든 필드를 저장하려면 해당 필드를 "Unlocalize"해야합니다. 이는 편집 된 텍스트 필드를 제외한 모든 텍스트 필드에 적용됩니다. 이미 지역화되지 않은 값을 내 메소드로 보내면 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 카테고리 :

textFieldDidEndEditing가 대응되어 있지 않은에서 편집중인 텍스트 필드의 값이라고
- (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

. 모든 문자열을 현지화 해제하기 전에 편집 된 값을 지역화하기 위해 cal이 누락되었다고 생각합니다. 문자열이 통화 스타일이 아니므로 편집 된 문자열에서 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]; 
}