2015-01-13 4 views

ответ

0

Вы можете сделать его работу с помощью Для сравнения: параметры: диапазон: Язык: и указать арабский локаль явно, как это:

NSArray *strings=[NSArray arrayWithObjects:@"as", @"ol", @"st", nil]; // also contain 
NSLocale *locale=[[NSLocale alloc] initWithLocaleIdentifier:@"ar_BH"]; 

NSArray *sorted=[strings sortedArrayUsingComparator:^(NSString *first, NSString *second) { 
    return [second compare:first 
        options:0 
        range:NSMakeRange(0, [second length]) 
        locale:locale]; 
}]; 

for (NSString *s in sorted) { NSLog(@"%@", s); } 
+0

Если мой подход поможет вам затем пометить мой ответ как принятый. –

0

Я сделал это так же :)

-(NSArray*)arabicFirstSortedArray:(NSArray*)arr {  

    static NSStringCompareOptions comparisonOptions = NSCaseInsensitiveSearch | NSNumericSearch | 
    NSWidthInsensitiveSearch | NSForcedOrderingSearch; 

    NSLocale *locale = [NSLocale localeWithLocaleIdentifier:@"ar"]; 

    NSArray *sortedArray = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { 

     NSRange string1Range = NSMakeRange(0, [obj1 length]); 

     return [obj1 compare:obj2 options:comparisonOptions range:string1Range locale:locale]; 
    }]; 

    return sortedArray; 
} 

Это другой способ сделать аравийскую нить сверху, но оставить сортировку, как это

-(NSArray*)arabicFirstSortedArray:(NSArray*)arr { 
NSArray *sortedArray = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { 

    BOOL isFirstArabic = [self isArabicString:obj1]; 
    BOOL isSecondArabic = [self isArabicString:obj2]; 

    if (isFirstArabic == isSecondArabic) { 
     return NSOrderedSame; 
    } 
    else if(isFirstArabic){ 
     return NSOrderedAscending; 
    } 
    else{ 
     return NSOrderedDescending; 
    } 
}]; 

return sortedArray; 
} 

-(BOOL)isArabicString:(NSString*)str { 

NSString *isoLangCode = (__bridge_transfer NSString*)CFStringTokenizerCopyBestStringLanguage((__bridge CFStringRef)str, CFRangeMake(0, str.length)); 

if([isoLangCode isEqualToString:@"ar"]){ 
    return YES; 
} 
else{ 
    return NO; 
} 
}