MST
星途 面试题库

面试题:Objective-C中AddressBook框架如何获取联系人姓名

在Objective-C项目中使用AddressBook框架,描述获取所有联系人姓名的主要步骤,并给出关键代码示例。
36.8万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试

获取所有联系人姓名的主要步骤

  1. 导入框架:在项目中导入 AddressBook.framework 以及 AddressBookUI.framework(如果需要使用联系人选择界面)。
  2. 请求授权:在iOS 6.0及以后,需要请求用户授权才能访问联系人数据。
  3. 打开地址簿数据库:使用 ABAddressBookCreateWithOptions 函数获取地址簿对象。
  4. 获取所有联系人:通过 ABAddressBookCopyArrayOfAllPeople 函数获取所有联系人的数组。
  5. 遍历联系人并获取姓名:遍历数组,使用 ABRecordCopyValue 函数获取每个联系人的姓名属性。

关键代码示例

#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>

// 请求授权
ABAddressBookRequestAccessWithCompletion(ABAddressBookCreateWithOptions(NULL, NULL), ^(bool granted, CFErrorRef error) {
    if (granted) {
        // 打开地址簿数据库
        ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
        
        // 获取所有联系人
        CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
        CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
        
        for (CFIndex i = 0; i < nPeople; i++) {
            ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);
            
            // 获取联系人姓名
            CFStringRef firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty);
            CFStringRef lastName = ABRecordCopyValue(person, kABPersonLastNameProperty);
            
            NSString *fullName = nil;
            if (firstName && lastName) {
                fullName = [NSString stringWithFormat:@"%@ %@", (NSString *)firstName, (NSString *)lastName];
            } else if (firstName) {
                fullName = (NSString *)firstName;
            } else if (lastName) {
                fullName = (NSString *)lastName;
            }
            
            if (fullName) {
                NSLog(@"Contact Name: %@", fullName);
            }
            
            if (firstName) CFRelease(firstName);
            if (lastName) CFRelease(lastName);
        }
        
        CFRelease(allPeople);
        CFRelease(addressBook);
    } else {
        NSLog(@"Access to address book denied.");
    }
});