簡體   English   中英

iOS對組ABRecordRef的CFArrayRef進行排序

[英]iOS Sort CFArrayRef of Groups ABRecordRef

我需要對包含聯系人組的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時嘗試比較字符串

感謝任何幫助

工作方式:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM