Сортировка ABRecords в алфавитном порядке на iPhone - PullRequest
1 голос
/ 03 апреля 2011

Я получаю имена контактов с этим кодом:

for( int i = 0 ; i < n ; i++ )
{
    Contact *c = [[Contact alloc] init];

    ABRecordRef ref = CFArrayGetValueAtIndex(all, i);
    NSString *firstName = (NSString *)ABRecordCopyValue(ref, kABPersonFirstNameProperty);
    NSString *lastName = (NSString *)ABRecordCopyValue(ref, kABPersonLastNameProperty);
    c.firstName = firstName; //[NSString stringWithFormat:@"%@ %@", firstName, lastName];
    c.lastName = lastName;

    [contacts addObject:c];

    [c release];
}

Кто-нибудь знает способ упорядочить этот список в алфавитном порядке?Я читал о sortedArrayUsingSelector:@selector(compare:), но я понятия не имею, как это должно работать.

Ответы [ 2 ]

2 голосов
/ 03 апреля 2011
NSSortDescriptor *mySorter = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES];
[contacts sortUsingDescriptors:[NSArray arrayWithObject:mySorter]];
[mySorter release];
1 голос
/ 17 августа 2016

Этот метод позволит вам соблюдать пользовательские настройки сортировки по имени или фамилии.

contacts = (bridgedPeople as [ABRecord]).sort {
    (person1, person2) -> Bool in
    return .CompareLessThan == ABPersonComparePeopleByName(person1, person2, ABPersonGetSortOrdering())
}

Pro-tip: Жирная часть названия, которое вы сортируетена;в противном случае это сбивает с толку, когда вы смешиваете контакты, у которых нет [имени, фамилии, имени и фамилии]

...