2013-09-29 1 views
1

최신 SDK가 포함 된 iOS 5.0 이상 앱을 개발 중입니다.[NSDictionary allKeys]를 알파벳 순으로 정렬하십시오.

국가 목록과 함께 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 (A)의를 사용하는 것을 시도했다 :

+ (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를 가져 오는 방법이 있습니까?

+0

로 새로운 배열을 얻을 것이다 국가 코드 대신 사전으로? – trojanfoe

+2

'-sortUsingSelector :'는 NSMutableArray 클래스의 메소드이기 때문에 발생할 수 있습니다. NSArray는 대신'-sortedArrayUsingSelector :'메소드를 가지고 있고'allKeys' 메소드는'NSMutableArray' 객체보다 NSArray를 반환합니다. – holex

답변

2

sortUsingSelector은 : NSMutableArray를하는 방법하지 당신이 배열을 정렬 sortedArrayUsingSelector를 사용할 수있는 NSArray 하는 방법이고, 당신은 분류 내용

당신이 국가 이름을 사용하는 이유
- (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:)];  
} 
+0

이 메서드는 NSArray를 반환하지만 반환 형식은 NSDictionary로 선언됩니다. – rmaddy

관련 문제