2017-03-06 5 views
1

CFNumberFormatterCreateStringWithNumberで問題が発生しています。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 

答えて

2

あなたのコードは、経験的に私のために働いていた私はthis Apple code exampleを使用しました。私は化粧品の変更のカップルを作るために必要な:

の出力になり
#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 
0

私はコンパイルおよびC++コードから実行していたので、それは(これは動作しませんでしたが判明しました.cpp拡張子)、ファイルの拡張子を.mmに変更すると機能します(Objective-C++)