以编程方式在iOS中访问通讯簿?

时间:2013-03-19 09:14:02

标签: iphone ios objective-c ipad device

目前我正在开发一个应用程序,它将利用设备地址簿中提供的联系人。

我希望通过以下方式获取联系人列表。地址簿,除了每个联系人之外还有复选框选项。谁能告诉我怎么做到这一点?

2 个答案:

答案 0 :(得分:4)

查看ABAddressBook框架。获取联系人列表作为数组并在UItableview中填充此列表,您可以使用UITableViewCellAccessoryCheckmark显示所选联系人。

请参阅下面的代码。它返回一个包含联系人的数组。这里的AddressObject是一个模态类。

-(NSArray*)addressBookLoader
{
    CFErrorRef *error = NULL;

    NSMutableArray *arrayofAddressClassObjects =[[NSMutableArray alloc]init];

    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL,error);

    ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook);
    CFArrayRef sortedPeople =ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByFirstName);

    //RETRIEVING THE FIRST NAME AND PHONE NUMBER FROM THE ADDRESS BOOK

    CFIndex number = CFArrayGetCount(sortedPeople);

    NSString *firstName;
    NSString *phoneNumber ;

    for( int i=0;i<number;i++)
    {

        ABRecordRef person = CFArrayGetValueAtIndex(sortedPeople, i);
        firstName = (__bridge NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
        ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty);
        phoneNumber = (__bridge NSString *) ABMultiValueCopyValueAtIndex(phones, 0);

        if(phoneNumber != NULL)
        {

            AddressObject *obj = [[AddressObject alloc]init];
            obj.contactName = firstName;
            obj.contactNumber = phoneNumber;

            [arrayofAddressClassObjects addObject:obj];

        }


    }

    NSLog(@"x=%@",arrayofAddressClassObjects);

    return arrayofAddressClassObjects;

}

答案 1 :(得分:2)

要访问地址簿,请查看使用ABAddressBook.

  

ABAddressBook opaque类型(其实例称为地址   books)为Address Book-a提供了一个编程接口   多个应用程序用于存储个人的集中式数据库   关于人的信息。通讯簿数据库也支持   包含一个或多个人的“群体”的概念。人可能属于   对于多个组,组也可能属于其他组。

     

ABAddressBook opaque类型提供了创建功能   引用通讯簿数据库,保存更改,丢弃   更改,并注册外部更改(由其他线程   或进程)到数据库。

使用地址簿的结果填充UITableView,然后以编程方式为每个UITableViewCell添加一个复选标记,如下所示:

cell.accessoryType = UITableViewCellAccessoryCheckmark;