根据AddressBook iOS中最近使用/最常用/紧急的排序联系人

时间:2014-10-15 12:28:02

标签: ios objective-c xcode sorting abaddressbook

我需要根据最近使用/最常用/紧急的情况对用户设备中的联系人进行排序,并将它们显示在一个视图中(而不是在手机应用程序中,它们显示在单独的标签中)。我已经研究过这个,但只是按字母顺序了解排序联系人。 AddressBook框架是允许这个还是有其他方法?任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

即可。不幸的是,没有办法知道最近是否使用过记录。

但是,您可以使用下面指定的属性对地址簿中的记录进行排序:

AdressBook Record Properties 下面是一个基于创建日期降序排序记录的简单示例。

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]。

     

这将是记录的更改日期/时间   }

希望它会对你有所帮助。