我需要根据最近使用/最常用/紧急的情况对用户设备中的联系人进行排序,并将它们显示在一个视图中(而不是在手机应用程序中,它们显示在单独的标签中)。我已经研究过这个,但只是按字母顺序了解排序联系人。 AddressBook框架是允许这个还是有其他方法?任何帮助将不胜感激。
答案 0 :(得分:3)
否即可。不幸的是,没有办法知道最近是否使用过记录。
但是,您可以使用下面指定的属性对地址簿中的记录进行排序:
下面是一个基于创建日期降序排序记录的简单示例。
ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(nil, NULL);
ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {
NSArray *allPeople = CFBridgingRelease(ABAddressBookCopyArrayOfAllPeople(addressBookRef));
NSArray *sortedPeople = [allPeople sortedArrayUsingComparator:^NSComparisonResult(id aRecord, id otherRecord) {
ABRecordRef aRecordRef = (__bridge ABRecordRef)aRecord;
ABRecordRef otherRecordRef = (__bridge ABRecordRef)otherRecord;
NSDate *aRecordCreationDate = CFBridgingRelease(ABRecordCopyValue(aRecordRef, kABPersonCreationDateProperty));
NSDate *otherRecordCreationDate = CFBridgingRelease(ABRecordCopyValue(otherRecordRef, kABPersonCreationDateProperty));
return [aRecordCreationDate compare:otherRecordCreationDate];
}];
});
CFRelease(addressBookRef);
答案 1 :(得分:1)
您好我找到了解决方案首先我们创建Abaddressbook并使用更改回调注册它
1)ABAddressBookRef ntificationaddressbook = ABAddressBookCreate();
2)ABAddressBookRegisterExternalChangeCallback(ntificationaddressbook,addressBookChanged,self);
以及何时对任何联系人进行更改(修改,打开,编辑等)。 然后它的回调将像这样调用它的委托
3)void addressBookChanged(ABAddressBookRef reference, CFDictionaryRef字典, void * context)
{
///地址簿已更改
//现在你可以实现逻辑
1 - 首先获取现在的更改日期和时间。来自[NSdate date]。
这将是记录的更改日期/时间 }
希望它会对你有所帮助。