2010-07-15 4 views
3

ObjectiveResource을 사용하는 응용 프로그램이 있고 NSNumber 속성이 포함 된 클래스가 있습니다. I는 정수로의 NSNumber 값을 포맷하기 위해 노력하고, 다음 코드가 오전 :ObjectiveResource 및 깨진 NSNumberFormatter

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

출력 :

2010-07-15 19 : 33 : 45.371 샘플 [4193 : 207] 알코올 : (널)
2010-07-15 19 : 33 : 45.453 샘플 [4193 : 207] 알코올 : $ 13.50

첫 번째 항목이 출력되는 이유는 (널) 확실하지 않다, 아직 두 번째는 잘 작동합니다. 첫 번째 구문을 사용하고 NSNumber를 다시 만들 필요가 없습니다.

+1

''NSNumber * '로 선언되는'price'는 있습니까? 그냥'NSLog (@ "% @", self.item.price)의 결과는 무엇입니까? – warrenm

+0

@warrenm Price는 NSNumber *이고 NSLog (@ "% @", self.item.price)의 결과는 13.5입니다. –

+0

첫 번째 행은 간단한 테스트에서 작동하므로 범인이 NSNumberFormatter를 벗어날 수 있습니다. KVO를 통해 '가격'변경 사항 등록을 시도 했습니까? 부모 객체가 동시에 업데이트되고 있습니까? – warrenm

답변

2

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 
+0

해결할 지 모르겠지만 현명한 방법입니다. – vodkhang

+0

감사합니다. MVDS. ActiveResource 코드를 살펴 보았습니다. 실제로 이것은 사실입니다. 아래 수정 사항을 추가했습니다. –

1

은 (XMLElementDelegate는 XML 요소 위임에 해결하려면. 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]]; 
}