Отображение символов валюты с использованием кодов валюты в iPhone SDK

На самом деле, я хочу отображать символы валюты всех кодов валют, и я использую такой код, но я получаю только символы "$"

-(void) showCurrenciesList
{
    NSNumberFormatter *numFormatter = [[NSNumberFormatter alloc] init];                         
    [numFormatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    //[numFormatter setLocale: [NSLocale currentLocale]];

    NSMutableArray *aryAllCurrencies = [[NSMutableArray alloc] init]; 
    //NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier: @"en_US"] autorelease];

    NSArray *currencyArray = [NSLocale ISOCurrencyCodes]; 
    NSLog(@"Currency array : %@",currencyArray);

    for (NSString *currencyCode in currencyArray) 
    {
        NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
        [numFormatter setCurrencyCode:currencyCode];
        NSString *currencySymbol = [numFormatter currencySymbol];
        [aryAllCurrencies addObject:currencySymbol];
        [pool release];     
    }   
    //[countriesArray sortUsingSelector:@selector(compare:)];
    NSLog(@"currencies array : %@",aryAllCurrencies);   
}

Это правильно или есть другой способ сделать это?


person NSS    schedule 08.06.2011    source источник
comment
Проверьте stackoverflow.com/questions/2574191/   -  person Jhaliya - Praveen Sharma    schedule 08.06.2011
comment
Этот метод покажет только текущий символ валюты локалей.   -  person Konstantin Chugalinskiy    schedule 08.06.2011
comment
вы уверены, что проблема там? Я только что проверил это на моем симуляторе iphone и на моей Mac OS. displayNameString кажется в порядке.   -  person Konstantin Chugalinskiy    schedule 08.06.2011
comment
Спасибо, я понял. На самом деле я хочу отображать символы всех валют. Итак, как я могу показать? У меня есть массив NSArray *currencyArray = [NSLocale ISOCurrencyCodes];   -  person NSS    schedule 08.06.2011
comment
@konstantin: у меня проблема в той же строке.. но я понял, что с помощью NumberFormatter я могу отобразить.. Но если я пишу такой код, он отображает только $..   -  person NSS    schedule 08.06.2011


Ответы (2)


Из руководства по какао: Typically, therefore, you should use drain instead of release. На самом деле вам здесь вообще не нужен NSAutoreleasePool. Но это не причина вашей проблемы. Проблема в локали. NSNumberFormatter имеет назначенную локаль. Если вы хотите использовать NSNumberFormatter, вам следует изменить язык перед отправкой currencySymbol сообщения. Но я советую вам использовать NSLocale, как вы делали это в своем первом коде:

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier: @"en_US"];
NSString *dollar = [locale displayNameForKey:NSLocaleCurrencyCode value:@"USD"];
[locale release];

Я проверил этот код дважды перед публикацией.

person Konstantin Chugalinskiy    schedule 08.06.2011
comment
Я хочу отображать для всех валют. Есть ли динамичный и быстрый способ установить локаль вместо настройки для каждой страны? - person Warrior; 24.10.2011

Это прямое дорогое решение

+(NSString *)getCurrencySybolByCurrecyCode:(NSString *)code
{
    NSArray *locales = [NSLocale availableLocaleIdentifiers];
    for (NSString *currentLocale in locales)
    {
        NSLocale *currentLoc = [[[NSLocale alloc] initWithLocaleIdentifier:currentLocale] autorelease];
        if([[currentLoc objectForKey:NSLocaleCurrencyCode] isEqualToString:code])
        {
            NSLog(@"find symbol for code = %@ %@", [currentLoc objectForKey:NSLocaleCurrencyCode], [currentLoc objectForKey:NSLocaleCurrencySymbol]);
            return [currentLoc objectForKey:NSLocaleCurrencySymbol];        }
    }
    return nil;
}
person Alexander Yatsenko    schedule 17.06.2013