Я создаю подкласс NSNumberFormatter, чтобы символ валюты был необязательным. Вот мой код:
- (BOOL)getObjectValue:(out id *)anObject forString:(NSString *)aString range:(inout NSRange *)rangep error:(out NSError **)error {
if (rangep == NULL){
NSRange newRange = NSMakeRange(0, [aString length]);
rangep = &newRange;
}
NSString *newStr = [aString stringByReplacingOccurrencesOfString:[self currencySymbol]
withString:@""
options:0
range:*rangep];
if (![newStr isEqualToString:aString]) {
NSRange newRange;
newRange.location = ((NSRange)*rangep).location;
newRange.length = ((NSRange)*rangep).length;
newRange.length -= ([aString length] - [newStr length]);
rangep = &newRange;
}
return [super getObjectValue:anObject
forString:newStr
range:rangep
error:error];
}
В Mac OS X 10.6 и выше этот код работает абсолютно нормально. Однако в 10.5.x код завершается ошибкой - происходит сбой при вызове [super getObjectValue: ...], и возвращаемая ошибка является довольно общим «NSFormattingError» (код 2048).
Кто-нибудь знает, что происходит?
Форматтер настроен на генерацию десятичных чисел.