代码之家  ›  专栏  ›  技术社区  ›  Kevin Sylvestre

ObjectiveResource和损坏的NSNumberFormatter

  •  3
  • Kevin Sylvestre  · 技术社区  · 15 年前

    我有一个应用程序 ObjectiveResource

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    
    [formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    
    NSLog(@"Price: %@", [formatter stringFromNumber:self.item.price])
    NSLog(@"Price: %@", [formatter stringFromNumber:[NSNumber numberWithDouble:[self.item.price doubleValue]]]);
    
    [formatter release];
    

    样品[4193:207]酒精:(空)
    样品[4193:207]酒精:$13.50

    2 回复  |  直到 15 年前
        1
  •  2
  •   mvds    15 年前

    self.item.price可能是NSString?

    通过一次可怕的破解,我可以准确地重现你的结果:

    NSNumber *price = (NSNumber*)@"13.5"; // *shiver*, don't try this at home!
    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    
    [formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    
    NSLog(@"Price: %@", [formatter stringFromNumber:price]);
    NSLog(@"Price: %@", [formatter stringFromNumber:[NSNumber numberWithDouble:[price doubleValue]]]);
    

    NSString 响应 doubleValue

    2010-07-16 17:17:50.384 test[716:207] Price: (null)
    2010-07-16 17:17:50.386 test[716:207] Price: $13.50
    
        2
  •  1
  •   Kevin Sylvestre    15 年前

    为了解决这个问题,在XML元素委托(xmlementdelegate.m)中,需要取消注释一段代码以支持NSNumber。这条线是:

    // uncomment this if you what to support NSNumber and NSDecimalNumber
    // if you do your classId must be a NSNumber since rails will pass it as such
    else if ([type isEqualToString:@"decimal"]) {
        return [NSDecimalNumber decimalNumberWithString:propertyValue];
    }
    else if ([type isEqualToString:@"integer"]) {
        return [NSNumber numberWithInt:[propertyValue intValue]];
    }