按字母顺序排序[NSDictionary allKeys]

时间:2013-09-29 07:53:43

标签: ios objective-c sorting

我正在使用最新的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;
}

但是,我需要使用一些东西,例如NSDictionary;让我知道获取ISO代码和本地化名称。

我尝试使用NSDictionary代替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?

1 个答案:

答案 0 :(得分: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:)];    
}