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 代码和本地化名称。

我尝试使用 aNSDictionary而不是 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:)];

如何对所有键进行排序?
有没有办法使用它的 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 回答