Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
组ABRecordRef的iOS排序CFArrayRef_Ios_Xcode_Sorting - Fatal编程技术网

组ABRecordRef的iOS排序CFArrayRef

组ABRecordRef的iOS排序CFArrayRef,ios,xcode,sorting,Ios,Xcode,Sorting,我需要对一个包含联系人组ABRecordRef的CFArrayRef进行排序 ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); CFArrayRef allGroups = ABAddressBookCopyArrayOfAllGroups(addressBook); CFIndex allGroupsCount = ABAddressBookGetGroupCount(addressBook);

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

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
CFArrayRef allGroups = ABAddressBookCopyArrayOfAllGroups(addressBook);
CFIndex allGroupsCount = ABAddressBookGetGroupCount(addressBook);
我知道在对联系人进行排序时很容易做到这一点,因为有abpersoncompareproplebyname,但是组中没有类似的功能。 所以我不知道在这种情况下如何使用CFArraySortValues

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

CFMutableArrayRef marray = CFArrayCreateMutableCopy(kCFAllocatorDefault, allGroupsCount, allGroups);
CFArraySortValues(marray, CFRangeMake(0, allGroupsCount), (CFComparatorFunction)CFStringCompare, Null);
但它当然不会工作,因为它在接收ABRecordRef时会尝试比较字符串

感谢您的帮助

它的工作方式:

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的原因是为了避免警告。

找到解决方案了吗?没有,我没有太多时间来处理它。