iOS 读取通讯录

版权声明:本文为博主czb1n(https://www.zbin.tech)原创文章,未经博主允许不得转载。 https://blog.csdn.net/czb1n/article/details/50515958

iOS9之前

#import <AddressBook/AddressBook.h>

// 先创建一个通讯录的对象。
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, nil);
// 从iOS6之后,读取用户通讯录需要先获得权限。
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
	// 当granted为YES时,表示用户同意访问通讯录。
	if (granted) {
		// 获取权限提醒只会在第一次使用的时候出现。
		// 获取权限之后可以在这里马上遍历通讯录,或者在其他任何地方。

		// 获取通讯录中的所有人。
		 CFArrayRef peopleArray = ABAddressBookCopyArrayOfAllPeople(addressBook);
		 for(int i = 0; i < CFArrayGetCount(peopleArray); i++){
			 // 获取第 i 个人
			 ABRecordRef person = CFArrayGetValueAtIndex(peopleArray, i);
			 // 用 ABRecordCopyValue 方法, 根据不同的 key 去获取通讯录中的人的属性、信息。
			 // 至于属性的 key 我就不列出来了,可以去看看 ABPerson.h 。
			 // 如获取 FirstName :
			 NSString *personName = (__bridge NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);
			 // 有些属性为一个Array, 需要再次遍历, 如获取电话号码就会有多个号码的情况:
			 ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty);
			 for (int j = 0; j < ABMultiValueGetCount(phones); j++){
				 NSString *phoneLabel = (__bridge NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(phones, j));
				 NSString *phoneNumber = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, j);
			 }
		 }
	}
	else {
		// 用户不同意应用访问通讯录。
	}
}


iOS9 - Contacts Framework

#import <Contacts/Contacts.h>


// 一样先要获得通讯录的权限。
// 新建一个 CNContactStore 的对象。
CNContactStore *store = [[CNContactStore alloc] init];
[store requestAccessForEntityType:CNEntityTypeContacts 
				completionHandler:^(BOOL granted, NSError * _Nullable error) {
	// 同样granted为YES时表示用户同意访问通讯录。
	if(granted){
		// Contacts Framework 读取的方式和数据库检索方式有点相似,需要先写一个条件去匹配提取。
        
// 匹配的方式有四种 :
        // + (NSPredicate *)predicateForContactsMatchingName:(NSString *)name;

		// + (NSPredicate *)predicateForContactsWithIdentifiers:(NSArray<NSString*> *)identifiers;

		// + (NSPredicate *)predicateForContactsInGroupWithIdentifier:(NSString *)groupIdentifier;

		// + (NSPredicate *)predicateForContactsInContainerWithIdentifier:(NSString *)containerIdentifier;
		
        // 如按名字的方式去匹配。
        NSPredicate *predicate = [CNContact predicateForContactsMatchingName:@"czbin"];
        // 根据条件去提取信息
        NSArray *contacts = [store unifiedContactsMatchingPredicate:predicate 
												        keysToFetch:@[CNContactGivenNameKey] 
														      error:nil];

		// 也可以根据一个请求(CNContactFetchRequest)去遍历通讯录中的联系人
        CNContactFetchRequest *request = [[CNContactFetchRequest alloc] initWithKeysToFetch:@[CNContactGivenNameKey]];
        [store enumerateContactsWithFetchRequest:request 
									       error:nil 
									  usingBlock:^(CNContact *contact, BOOL *stop) {
	        // 每一个 CNContact 对象就是一个联系人
	        NSLog(@"%@",contact);
        }];
	}
}];

// 其中提取信息时的 keysToFetch 为指定需要提取联系人的信息。
// 有以下的值 :
	        // CNContactIdentifierKey           
			// CNContactNamePrefixKey           
			// CNContactGivenNameKey            
			// CNContactMiddleNameKey           
			// CNContactFamilyNameKey           
			// CNContactPreviousFamilyNameKey   
			// CNContactNameSuffixKey           
			// CNContactNicknameKey             
			// CNContactPhoneticGivenNameKey    
			// CNContactPhoneticMiddleNameKey   
			// CNContactPhoneticFamilyNameKey   
			// CNContactOrganizationNameKey     
			// CNContactDepartmentNameKey       
			// CNContactBirthdayKey             
			// CNContactNonGregorianBirthdayKey 
			// CNContactNoteKey                 
			// CNContactImageDataKey
			// CNContactThumbnailImageDataKey   
			// CNContactImageDataAvailableKey
			// CNContactTypeKey                    
			// CNContactPhoneNumbersKey            
			// CNContactEmailAddressesKey          
			// CNContactPostalAddressesKey         
			// CNContactDatesKey                   
			// CNContactUrlAddressesKey            
			// CNContactRelationsKey               
			// CNContactSocialProfilesKey          
			// CNContactInstantMessageAddressesKey 

猜你喜欢

转载自blog.csdn.net/czb1n/article/details/50515958