我正在对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)。
有谁知道发生了什么事?
格式化程序设置为生成十进制数。