1.添加 AddressBook庫
- (IBAction)add:(id)sender {
ABAddressBookRequestAccessWithCompletion(ABAddressBookRef addressBookRef, ^(bool granted, CFErrorRef error) {
if (granted) {
dispatch_async(dispatch_get_main_queue(), ^{
NSArray * array=[self getContactsFromAddressBook];
});
} else {
// TODO: Show alert
}
});
}
-(NSMutableArray *)getContactsFromAddressBook
{
CFErrorRef error = NULL;
NSMutableArray * contacts = [[NSMutableArray alloc]init];
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, &error);
if (addressBook) {
NSArray *allContacts = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
NSMutableArray *mutableContacts = [NSMutableArray arrayWithCapacity:allContacts.count];
NSUInteger i = 0;
for (i = 0; i<[allContacts count]; i++)
{
//THContact 一個model對象,有name和phoneNum兩個屬性
THContact *contact = [[THContact alloc] init];
ABRecordRef contactPerson = (__bridge ABRecordRef)allContacts[i];
contact.recordId = ABRecordGetRecordID(contactPerson);
// Get first and last names
NSString *firstName = (__bridge_transfer NSString*)ABRecordCopyValue(contactPerson, kABPersonFirstNameProperty);
NSString *lastName = (__bridge_transfer NSString*)ABRecordCopyValue(contactPerson, kABPersonLastNameProperty);
NSString * midName = (__bridge_transfer NSString*)ABRecordCopyValue(contactPerson, kABPersonMiddleNameProperty);
// Set Contact properties
contact.firstName = firstName;
contact.lastName = lastName;
contact.middleName = midName;
// Get mobile number
ABMultiValueRef phonesRef = ABRecordCopyValue(contactPerson, kABPersonPhoneProperty);
contact.phone = [self getMobilePhoneProperty:phonesRef];
if(phonesRef) {
CFRelease(phonesRef);
}
if (contact.phone.count >0) {
[mutableContacts addObject:contact];
}
}
if(addressBook) {
CFRelease(addressBook);
}
contacts = [NSMutableArray arrayWithArray:mutableContacts];
return contacts;
}
else
{
NSLog(@"Error");
}
return nil;
}
- (NSMutableArray *)getMobilePhoneProperty:(ABMultiValueRef)phonesRef
{
NSMutableArray * array = [NSMutableArray array];
for (int k = 0; k
{
//獲取電話Label
// NSString * personPhoneLabel = (__bridge NSString*)ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(phonesRef, k));
//獲取該Label下的電話值
NSString * personPhone = (__bridge NSString*)ABMultiValueCopyValueAtIndex(phonesRef, k);
if (personPhone) {
[array addObject:personPhone];
}
}
return array;
}