From dd6c0fb031a66fc3dc34198794611f54d2842d5b Mon Sep 17 00:00:00 2001 From: Gautier Pelloux-Prayer Date: Mon, 2 Feb 2015 16:24:36 +0100 Subject: [PATCH] Sort contacts in the right order --- Classes/ContactsTableViewController.m | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Classes/ContactsTableViewController.m b/Classes/ContactsTableViewController.m index ddfce78ba..79675a18d 100644 --- a/Classes/ContactsTableViewController.m +++ b/Classes/ContactsTableViewController.m @@ -176,11 +176,12 @@ static int ms_strcmpfuz(const char * fuzzy_word, const char * sentence) { if ([ContactSelection getNameOrEmailFilter] == nil || (ms_strcmpfuz([[[ContactSelection getNameOrEmailFilter] lowercaseString] UTF8String], [[name lowercaseString] UTF8String]) == 0)) { - //Get first char. However translate them to ASCII first, because foreign languages (spanish) use tildes for instance - NSString *firstCharUTF8 = [[name substringToIndex:1] uppercaseString]; - NSData *data = [firstCharUTF8 dataUsingEncoding:NSASCIIStringEncoding - allowLossyConversion:YES]; - NSString *firstChar = [[[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding] autorelease]; + //Sort contacts by first letter. We need to translate the name to ASCII first, because of UTF-8 issues. For instance + // we expect order: Alberta(A tilde) before ASylvano. + NSData *name2ASCIIdata = [name dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; + NSString *name2ASCII = [[[NSString alloc] initWithData:name2ASCIIdata encoding:NSASCIIStringEncoding] autorelease]; + NSString *firstChar = [[name2ASCII substringToIndex:1] uppercaseString]; + // Put in correct subDic if([firstChar characterAtIndex:0] < 'A' || [firstChar characterAtIndex:0] > 'Z') { firstChar = @"#"; @@ -190,7 +191,7 @@ static int ms_strcmpfuz(const char * fuzzy_word, const char * sentence) { subDic = [[[OrderedDictionary alloc] init] autorelease]; [addressBookMap insertObject:subDic forKey:firstChar selector:@selector(caseInsensitiveCompare:)]; } - [subDic insertObject:lPerson forKey:name selector:@selector(caseInsensitiveCompare:)]; + [subDic insertObject:lPerson forKey:name2ASCII selector:@selector(caseInsensitiveCompare:)]; } } if(lLocalizedlOrganization != nil)