1

最新の SDK を使用して iOS 5.0 以降のアプリを開発しています。

UIPickerView国のリストを表示したい。これらの国はアルファベット順にソートされます。ユーザーが国を選択すると、その ISO コードを保存する必要があります。

これは、国名をローカライズするために現在使用しているコードです。

+ (NSArray*)countriesNames
{
    NSLocale *locale = [NSLocale currentLocale];
    NSArray *countryArray = [NSLocale ISOCountryCodes];

    NSMutableArray *sortedCountryArray = [[NSMutableArray alloc] init];

    for (NSString *countryCode in countryArray)
    {
        NSString* displayNameString = [locale displayNameForKey:NSLocaleCountryCode
                                                          value:countryCode];
        [sortedCountryArray addObject:displayNameString];
    }
    [sortedCountryArray sortUsingSelector:@selector(localizedCompare:)];

    return sortedCountryArray;
}

ただし、何かを使用する必要があります。たとえば、 a NSDictionary; ISOコードとローカライズされた名前を取得することを教えてくれました。

NSDictionarya の代わりに aを使用しようとしましたNSArray:

+ (NSDictionary*)countriesNames
{
    NSLocale *locale = [NSLocale currentLocale];
    NSArray *countryArray = [NSLocale ISOCountryCodes];

    NSMutableDictionary* sortedCountryDic = [[NSMutableDictionary alloc] init];

    for (NSString *countryCode in countryArray)
    {
        NSString* displayNameString = [locale displayNameForKey:NSLocaleCountryCode
                                                          value:countryCode];
        [sortedCountryDic setObject:countryCode forKey:displayNameString];

    }

    [[sortedCountryDic allKeys] sortUsingSelector:@selector(localizedCompare:)];

    return sortedCountryDic;
}

しかし、コンパイル時の例外が発生します: No visible @interface for 'NSArray' declares the selector 'sortUsingSelector:'.

ここ:

[[sortedCountryDic allKeys] sortUsingSelector:@selector(localizedCompare:)];

allKeys を並べ替えるにはどうすればよいですか?
displayName を使用して ISOCode を取得する方法はありますか?

4

1 に答える 1

2

sortUsingSelector: は NSMutableArray のメソッドであり、NSArray のメソッドではありません。sortedArrayUsingSelector を使用して配列をソートすると、コンテンツがソートされた新しい配列が得られます。

- (NSArray *)sortedArrayUsingSelector:(SEL)comparator


+ (NSArray*)countriesNames
{
    NSLocale *locale = [NSLocale currentLocale];
    NSArray *countryArray = [NSLocale ISOCountryCodes];

    NSMutableDictionary* sortedCountryDic = [[NSMutableDictionary alloc] init];

    for (NSString *countryCode in countryArray)
    {
        NSString* displayNameString = [locale displayNameForKey:NSLocaleCountryCode
                                                          value:countryCode];
        [sortedCountryDic setObject:countryCode forKey:displayNameString];

    }

    return [[sortedCountryDic allKeys] sortedArrayUsingSelector:@selector(localizedCompare:)];    
}
于 2013-09-29T07:58:01.430 に答える