CFNumberFormatterCreateStringWithNumber int issue
问题描述:
我在CFNumberFormatterCreateStringWithNumber
看到一个问题。我用this Apple code example:CFNumberFormatterCreateStringWithNumber int issue
// Works fine with float:
float n = 1.20;
CFNumberRef value = CFNumberCreate(NULL, kCFNumberFloatType, &n);
CFLocaleRef currentLocale = CFLocaleCopyCurrent();
// Create different number formatters
CFNumberFormatterRef decimalFormatter = CFNumberFormatterCreate(NULL, currentLocale, kCFNumberFormatterDecimalStyle);
CFStringRef decimalString = CFNumberFormatterCreateStringWithNumber(NULL, decimalFormatter, value);
// Using an INT I see an issue
int n = 892385;
CFNumberRef value = CFNumberCreate(NULL, kCFNumberSInt32Type, &n);
CFLocaleRef currentLocale = CFLocaleCopyCurrent();
// Create different number formatters
CFNumberFormatterRef decimalFormatter = CFNumberFormatterCreate(NULL, currentLocale, kCFNumberFormatterDecimalStyle);
CFStringRef decimalString = CFNumberFormatterCreateStringWithNumber(NULL, decimalFormatter, value);
/// release, release, release
我用一个int值(而不是浮动)时看到的错误是:
<CFNumber 0x5ac27 [0x7fff9856ed80]>{value = +1452, type = kCFNumberSInt32Type}
2017-03-05 21:42:06.789577 HID_Dumper[4390:150864] -[__NSCFNumber _getCString:length:multiplier:]: unrecognized selector sent to instance 0x2e4027
答
您的代码在那里经验为我工作。我只需要一对夫妇的化妆品的变化:
#import <CoreFoundation/CoreFoundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
// Works fine with float:
float n = 1.20;
CFNumberRef value = CFNumberCreate(NULL, kCFNumberFloatType, &n);
CFLocaleRef currentLocale = CFLocaleCopyCurrent();
// Create different number formatters
CFNumberFormatterRef decimalFormatter = CFNumberFormatterCreate(NULL, currentLocale, kCFNumberFormatterDecimalStyle);
CFStringRef decimalString = CFNumberFormatterCreateStringWithNumber(NULL, decimalFormatter, value);
NSLog(@"float is %@", (__bridge NSString *)decimalString);
CFRelease(decimalFormatter);
CFRelease(decimalString);
// Using an INT I see an issue
SInt32 duh = 892385;
value = CFNumberCreate(NULL, kCFNumberSInt32Type, &duh);
currentLocale = CFLocaleCopyCurrent();
// this is the exact same formatter as up there...
decimalFormatter = CFNumberFormatterCreate(NULL, currentLocale, kCFNumberFormatterDecimalStyle);
decimalString = CFNumberFormatterCreateStringWithNumber(NULL, decimalFormatter, value);
NSLog(@"integer is %@", (__bridge NSString *)decimalString);
/// release, release, release
CFRelease(decimalFormatter);
CFRelease(decimalString);
}
return 0;
}
导致的输出:
2017-03-05 22:31:49.502 Testing[3278:221264] Hello, World!
2017-03-05 22:31:49.510 Testing[3278:221264] float is 1.2
2017-03-05 22:31:49.511 Testing[3278:221264] integer is 892,385
Program ended with exit code: 0
答
事实证明,这并没有工作,因为我是在编译和C++代码运行( .cpp扩展名),当我将文件的扩展名切换为.mm(Objective-C++)时,它可以工作