Отображение символов валюты с помощью кодов валют в iPhone SDK - PullRequest
0 голосов
/ 08 июня 2011

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

-(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);   
}

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

Ответы [ 2 ]

4 голосов
/ 17 июня 2013

Это прямое решение высокой стоимости

+(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;
}
3 голосов
/ 08 июня 2011

Из руководства по какао: 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];

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

...