首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >组的iOS Sort CFArrayRef ABRecordRef

组的iOS Sort CFArrayRef ABRecordRef
EN

Stack Overflow用户
提问于 2015-03-27 05:30:29
回答 1查看 243关注 0票数 2

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

代码语言:javascript
复制
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
CFArrayRef allGroups = ABAddressBookCopyArrayOfAllGroups(addressBook);
CFIndex allGroupsCount = ABAddressBookGetGroupCount(addressBook);

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

尝试转换为CFMutable数组,然后按如下方式排序:

代码语言:javascript
复制
CFMutableArrayRef marray = CFArrayCreateMutableCopy(kCFAllocatorDefault, allGroupsCount, allGroups);
CFArraySortValues(marray, CFRangeMake(0, allGroupsCount), (CFComparatorFunction)CFStringCompare, Null);

但它当然不会工作,因为它会在接收ABRecordRef时尝试比较字符串

感谢任何帮助

EN

回答 1

Stack Overflow用户

发布于 2015-09-22 04:38:04

它的工作方式:

代码语言:javascript
复制
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的原因是为了避免出现警告。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29289257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档