2014-11-08 160 views
1

我無法從貨幣代碼(例如'USD')中獲取貨幣符號(例如'$')。從Objective-C中獲取貨幣代碼的貨幣符號

我目前想是這樣的:

NSString *code = [NSLocale ISOCurrencyCodes][indexPath.row]; 
NSLog(@"%@", [[NSLocale currentLocale] displayNameForKey:NSLocaleCurrencySymbol value:code]); 

接收(空)的結果...尋找正確的方式來獲得貨幣代碼的貨幣符號。儘管我還沒有看到結果,但我很確定這會給出重複的條目(歐元區國家,例如將重複,並將以許多不同的'€'符號結束)。有沒有更好的方法來解決這個問題?

編輯:我並沒有與NSNumberFormatter的問題,我需要的是iOS中支持用戶選擇一個(我將處理正確的貨幣的格式與NSNumberFormatter所有貨幣的列表,沒有問題)。

謝謝

+0

想知道爲什麼我收到了一個投票,誰回答了一分鐘前刪除了他的答案......噢,希望有人可以幫助我解決這個問題。 – Fdo 2014-11-08 15:27:21

回答

4

我不能重現您的問題。以下工作正常:

#import <Foundation/Foundation.h> 

int main(int argc, const char * argv[]) { 
    @autoreleasepool { 
    for (NSString *code in [NSLocale ISOCurrencyCodes]) { 
     NSLog(@"%@ -> %@", code, [[NSLocale currentLocale] displayNameForKey:NSLocaleCurrencySymbol value:code]); 
    } 
    } 
    return 0; 
} 

我懷疑你的問題是,indexPath.row是不是你希望它是什麼。

你不應該期望許多重複(如果有的話)。貨幣代碼清單沒有列出國家;它列出了貨幣。所以只有一歐元可以映射到€。在我的系統上,除了兩個解決方案外(EQE和LSM都是停產貨幣)。

請記住,我正在查看的列表中有299種不同的貨幣,因此您的選擇列表可能比您想象的要長得多。

+0

我將你的代碼複製到我的項目中,並且每一行都打印出這個:「ADP - >(null)」(只有第一行打印出的行,全部顯示爲空)......你說得對,貨幣太多了,我試圖找出一種標準化的方式來顯示至少20-30種最流行的貨幣,而不用硬編碼它,儘管我開始認爲這可能是唯一的解決方案 – Fdo 2014-11-08 15:38:43

+0

@Fdo我用空貨幣複製了問題符號列表僅在iOS版本8.1的模擬器上。對於iOS 8.2以及更高版本的模擬器,答案中的代碼正確無誤。也在iOS 7.1.2的設備上。可能是iOS 8.1的bug。 – 2015-10-07 12:52:17

0

我不知道你是否已經知道了這一點。

我在仿真器上運行過類似的問題,但不是設備。如果您在模擬器上運行,請查看是否手動設置語言和區域幫助。我注意到,當您的方案依賴於「系統語言」和「系統區域」時,這是特定的。如果我手動將語言設置爲「英語」並將區域設置爲「美國」,則可以再次確定貨幣符號。

步驟這樣做:

點擊你的計劃 - >點擊「編輯計劃」 - >確保您已選擇在側欄中的運行選項 - >「選項」 - >應用程序語言及應用設置爲不默認系統的區域。

讓我知道這是否有幫助。