iOS排序组ABRecordRef的CFArrayRef

时间:2015-03-26 21:30:29

标签: ios xcode sorting

我需要对包含联系人组的ABRecordRef的CFArrayRef进行排序。

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
CFArrayRef allGroups = ABAddressBookCopyArrayOfAllGroups(addressBook);
CFIndex allGroupsCount = ABAddressBookGetGroupCount(addressBook);

我知道在ABPersonComparePeopleByName排序联系人时很容易做到这一点,但这些组没有类似的东西。 所以我不知道在这种情况下如何使用CFArraySortValues。

尝试转换为CFMutable数组,然后像这样排序:

CFMutableArrayRef marray = CFArrayCreateMutableCopy(kCFAllocatorDefault, allGroupsCount, allGroups);
CFArraySortValues(marray, CFRangeMake(0, allGroupsCount), (CFComparatorFunction)CFStringCompare, Null);

但当然它不起作用,因为它在接收ABRecordRef

时尝试比较字符串

感谢任何帮助

1 个答案:

答案 0 :(得分:0)

它的工作方式:

NSArray *convertedAllGroupsArray = (__bridge NSArray*)allGroups;

id sortGroupName = ^(ABRecordRef * obj1, ABRecordRef * obj2){
    return [[(NSString *) ABRecordCopyValue(obj1, kABGroupNameProperty) lowercaseString] compare:[(NSString *) ABRecordCopyValue(obj2, kABGroupNameProperty) lowercaseString]];
};

NSArray *allGroupsSorted = [convertedAllGroupsArray sortedArrayUsingComparator:sortGroupName];

从CFArrayRef转换为NSArray的原因是为了避免警告。