首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS 通訊錄分組信息獲取:ABAddressBook 框架使用指南

     編輯:程式設計綜合問答

核心步驟

  1. 創建地址簿引用:ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
  2. 請求權限(iOS 6+):ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { ... });
  3. 獲取所有分組:CFArrayRef groups = ABAddressBookCopyArrayOfAllGroups(addressBook);
  4. 遍歷分組成員:
for (id group in (__bridge NSArray *)groups) {
    CFArrayRef members = ABGroupCopyArrayOfAllMembers((__bridge ABRecordRef)group);
    for (id person in (__bridge NSArray *)members) {
        NSString *name = (__bridge_transfer NSString *)ABRecordCopyValue((__bridge ABRecordRef)person, kABPersonFirstNameProperty);
        // 同理獲取電話、郵箱等...
    }
    CFRelease(members);
}
CFRelease(groups);
CFRelease(addressBook);

現代替代:Contacts 框架 (iOS 9+)

CNContactStore *store = [[CNContactStore alloc] init];
[store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError *error) {
    if (granted) {
        NSArray *containers = [store containersMatchingPredicate:nil error:nil];
        for (CNContainer *container in containers) {
            NSPredicate *pred = [CNContact predicateForContactsInContainerWithIdentifier:container.identifier];
            NSArray *contacts = [store unifiedContactsMatchingPredicate:pred keysToFetch:@[CNContactGivenNameKey, CNContactPhoneNumbersKey] error:nil];
            // 處理 contacts...
        }
    }
}];

建議

新項目直接使用 Contacts.framework,API 更現代(Swift 友好)、權限機制完善、支持鍵值觀察和批量操作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved