==>Hare To Add Contact and Get Contact From Addressbook:
==> Some Usefull related AddressBook Implemented And Importing:
#import <UIKit/UIKit.h>
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
@import AddressBook;
==> Here Confrim Protocol Of ABPeoplePickerNavigationController:
@interface ViewController : UIViewController <ABPeoplePickerNavigationControllerDelegate>
{
NSMutableArray *mutArrContactRecords;
}
@property (nonatomic, strong) ABPeoplePickerNavigationController *addressBookController;
@end
========================================================================
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
==> For User Sise Ask Permssed and Set It :
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusDenied || ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusRestricted) {
NSLog(@"Denied or restricted");
UIAlertView *cantAddContactAlert = [[UIAlertView alloc] initWithTitle: @"Cannot Add Contact" message: @"You must give the app permission to add the contact first." delegate:nil cancelButtonTitle: @"OK" otherButtonTitles: nil];
[cantAddContactAlert show];
}
else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized)
{
NSLog(@"Authorized");
}else{
// ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined
NSLog(@"Not Determinded");
}
ABAddressBookRequestAccessWithCompletion(ABAddressBookCreateWithOptions(NULL, nil), ^(bool granted, CFErrorRef error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (!granted){
//4
NSLog(@"Just denied");
UIAlertView *cantAddContactAlert = [[UIAlertView alloc] initWithTitle: @"Cannot Add Contact" message: @"You must give the app permission to add the contact first." delegate:nil cancelButtonTitle: @"OK" otherButtonTitles: nil];
[cantAddContactAlert show];
return;
}
//5
NSLog(@"Just authorized");
});
});
[self getAllRecordsOfAddressBook];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
==> This Method Used Fo Getting All Record From AddressBookUI:
#pragma mark ----------------------
#pragma mark User Define Methods
- (void)getAllRecordsOfAddressBook
{
ABAddressBookRef aAddBook = ABAddressBookCreateWithOptions(NULL, nil);
NSArray *aArrRecords = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(aAddBook);
// NSLog(@"Records :: %@",aArrRecords);
[aArrRecords enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
ABRecordRef aRecPerson = (__bridge ABRecordRef) obj;
NSString *aStrFirstName = (__bridge NSString *) ABRecordCopyValue(aRecPerson, kABPersonFirstNameProperty);
NSString *aStrLastName = (__bridge NSString *) ABRecordCopyValue(aRecPerson, kABPersonLastNameProperty);
NSLog(@"Name :: %@ %@",aStrFirstName,aStrLastName);
ABMutableMultiValueRef aMultiPhoneNumbers = ABRecordCopyValue(aRecPerson, kABPersonPhoneProperty);
NSString *aStrPhoneNumber;
for (int aIntCnt = 0; aIntCnt < ABMultiValueGetCount(aMultiPhoneNumbers); aIntCnt++) {
CFStringRef aPhoneLable = ABMultiValueCopyLabelAtIndex(aMultiPhoneNumbers, aIntCnt);
CFStringRef aPhoneValue = ABMultiValueCopyValueAtIndex(aMultiPhoneNumbers, aIntCnt);
if (CFStringCompare(aPhoneLable, kABPersonPhoneMainLabel, 0) == kCFCompareEqualTo) {
aStrPhoneNumber = (__bridge NSString *)aPhoneValue;
NSLog(@"Name :: %@, %@ :: %@",aStrFirstName, aPhoneLable,aPhoneValue);
}
CFRelease(aPhoneLable);
CFRelease(aPhoneValue);
}
CFRelease(aMultiPhoneNumbers);
}];
}
==> Using AddressBookUI to Add Record In AddessBook:
- (IBAction)addRecordClicked:(id)sender {
[self addRecord];
}
==> To Showing And Displaying Recoerd of This Action Clicked in AddressBookUI:-
- (IBAction)showAddressBookClicked:(id)sender {
_addressBookController = [[ABPeoplePickerNavigationController alloc] init];
[_addressBookController setPeoplePickerDelegate:self];
[self presentViewController:_addressBookController animated:YES completion:nil];
}
- (void)addRecord
{
NSString *aStrFirstName = @"ILDC";
NSString *aStrLastName = @"IndiaNIC";
NSString *aStrPhNumber = @"8888888888";
NSData *aDtImage = UIImageJPEGRepresentation([UIImage imageNamed:@"car.jpg"], 1.0);
ABAddressBookRef aAddBookRef = ABAddressBookCreateWithOptions(NULL, nil);
ABRecordRef aRecRef = ABPersonCreate();
ABRecordSetValue(aRecRef, kABPersonFirstNameProperty, (__bridge CFStringRef)aStrFirstName, nil);
ABRecordSetValue(aRecRef, kABPersonLastNameProperty, (__bridge CFStringRef)aStrLastName, nil);
ABMutableMultiValueRef aPhoneNmbs = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMultiValueAddValueAndLabel(aPhoneNmbs, (__bridge CFStringRef)aStrPhNumber, kABPersonPhoneMainLabel, NULL);
ABRecordSetValue(aRecRef, kABPersonPhoneProperty, aPhoneNmbs, nil);
// To set Image
ABPersonSetImageData(aRecRef, (__bridge CFDataRef)aDtImage, nil);
NSArray *aArrRecords = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(aAddBookRef);
BOOL aBoolExists = NO;
__block BOOL ablockBoolExits = aBoolExists;
for (int aIntCnt = 0; aIntCnt < aArrRecords.count; aIntCnt++) {
ABRecordRef aRecPerson = (__bridge ABRecordRef) [aArrRecords objectAtIndex:aIntCnt];
if (CFStringCompare(ABRecordCopyCompositeName(aRecPerson),
ABRecordCopyCompositeName(aRecRef), 0) == kCFCompareEqualTo){
//The contact already exists!
NSLog(@"//The contact already exists!");
ablockBoolExits = YES;
break;
}
}
if (aBoolExists) {
return;
}
CFRelease(aPhoneNmbs);
CFRelease(aRecRef);
CFRelease(aAddBookRef);
[self getAllRecordsOfAddressBook];
}
#pragma mark ----------------------
#pragma mark ABPeople Picker Address Book Delegate Methods
-(void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker{
[_addressBookController dismissViewControllerAnimated:YES completion:nil];
}
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person
{
NSMutableDictionary *contactInfoDict = [[NSMutableDictionary alloc]
initWithObjects:@[@"", @"", @"", @"", @"", @"", @"", @"", @""]
forKeys:@[@"firstName", @"lastName", @"mobileNumber", @"homeNumber", @"homeEmail", @"workEmail", @"address", @"zipCode", @"city"]];
CFTypeRef generalObj;
generalObj = ABRecordCopyValue(person, kABPersonFirstNameProperty);
if (generalObj) {
[contactInfoDict setObject:(__bridge NSString *)generalObj forKey:@"firstName"];
CFRelease(generalObj);
}
// Phone Numbers
ABMutableMultiValueRef aMultiPhoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
for (int i=0; i < ABMultiValueGetCount(aMultiPhoneNumbers); i++) {
CFStringRef currentPhoneLabel = ABMultiValueCopyLabelAtIndex(aMultiPhoneNumbers, i);
CFStringRef currentPhoneValue = ABMultiValueCopyValueAtIndex(aMultiPhoneNumbers, i);
if (CFStringCompare(currentPhoneLabel, kABPersonPhoneMobileLabel, 0) == kCFCompareEqualTo) {
[contactInfoDict setObject:(__bridge NSString *)currentPhoneValue forKey:@"mobileNumber"];
}
if (CFStringCompare(currentPhoneLabel, kABHomeLabel, 0) == kCFCompareEqualTo) {
[contactInfoDict setObject:(__bridge NSString *)currentPhoneValue forKey:@"homeNumber"];
}
CFRelease(currentPhoneLabel);
CFRelease(currentPhoneValue);
}
CFRelease(aMultiPhoneNumbers);
// Email
ABMultiValueRef emailsRef = ABRecordCopyValue(person, kABPersonEmailProperty);
for (int i=0; i<ABMultiValueGetCount(emailsRef); i++) {
CFStringRef currentEmailLabel = ABMultiValueCopyLabelAtIndex(emailsRef, i);
CFStringRef currentEmailValue = ABMultiValueCopyValueAtIndex(emailsRef, i);
if (CFStringCompare(currentEmailLabel, kABHomeLabel, 0) == kCFCompareEqualTo) {
[contactInfoDict setObject:(__bridge NSString *)currentEmailValue forKey:@"homeEmail"];
}
if (CFStringCompare(currentEmailLabel, kABWorkLabel, 0) == kCFCompareEqualTo) {
[contactInfoDict setObject:(__bridge NSString *)currentEmailValue forKey:@"workEmail"];
}
CFRelease(currentEmailLabel);
CFRelease(currentEmailValue);
}
CFRelease(emailsRef);
// Addresss
ABMultiValueRef addressRef = ABRecordCopyValue(person, kABPersonAddressProperty);
if (ABMultiValueGetCount(addressRef) > 0) {
NSDictionary *addressDict = (__bridge NSDictionary *)ABMultiValueCopyValueAtIndex(addressRef, 0);
[contactInfoDict setObject:[addressDict objectForKey:(NSString *)kABPersonAddressStreetKey] forKey:@"address"];
[contactInfoDict setObject:[addressDict objectForKey:(NSString *)kABPersonAddressZIPKey] forKey:@"zipCode"];
[contactInfoDict setObject:[addressDict objectForKey:(NSString *)kABPersonAddressCityKey] forKey:@"city"];
}
CFRelease(addressRef);
// If Image exists
if (ABPersonHasImageData(person)) {
NSData *contactImageData = (__bridge NSData *)ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail);
[contactInfoDict setObject:contactImageData forKey:@"image"];
}
NSLog(@"Person :: %@",contactInfoDict);
// if (mutArrContactRecords == nil) {
// mutArrContactRecords = [[NSMutableArray alloc] init];
// }
// [mutArrContactRecords addObject:contactInfoDict];
}
-(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{
NSMutableDictionary *contactInfoDict = [[NSMutableDictionary alloc]
initWithObjects:@[@"", @"", @"", @"", @"", @"", @"", @"", @""]
forKeys:@[@"firstName", @"lastName", @"mobileNumber", @"homeNumber", @"homeEmail", @"workEmail", @"address", @"zipCode", @"city"]];
CFTypeRef generalObj;
generalObj = ABRecordCopyValue(person, kABPersonFirstNameProperty);
if (generalObj) {
[contactInfoDict setObject:(__bridge NSString *)generalObj forKey:@"firstName"];
CFRelease(generalObj);
}
// Phone Numbers
ABMutableMultiValueRef aMultiPhoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
for (int i=0; i < ABMultiValueGetCount(aMultiPhoneNumbers); i++) {
CFStringRef currentPhoneLabel = ABMultiValueCopyLabelAtIndex(aMultiPhoneNumbers, i);
CFStringRef currentPhoneValue = ABMultiValueCopyValueAtIndex(aMultiPhoneNumbers, i);
if (CFStringCompare(currentPhoneLabel, kABPersonPhoneMobileLabel, 0) == kCFCompareEqualTo) {
[contactInfoDict setObject:(__bridge NSString *)currentPhoneValue forKey:@"mobileNumber"];
}
if (CFStringCompare(currentPhoneLabel, kABHomeLabel, 0) == kCFCompareEqualTo) {
[contactInfoDict setObject:(__bridge NSString *)currentPhoneValue forKey:@"homeNumber"];
}
CFRelease(currentPhoneLabel);
CFRelease(currentPhoneValue);
}
CFRelease(aMultiPhoneNumbers);
// Email
ABMultiValueRef emailsRef = ABRecordCopyValue(person, kABPersonEmailProperty);
for (int i=0; i<ABMultiValueGetCount(emailsRef); i++) {
CFStringRef currentEmailLabel = ABMultiValueCopyLabelAtIndex(emailsRef, i);
CFStringRef currentEmailValue = ABMultiValueCopyValueAtIndex(emailsRef, i);
if (CFStringCompare(currentEmailLabel, kABHomeLabel, 0) == kCFCompareEqualTo) {
[contactInfoDict setObject:(__bridge NSString *)currentEmailValue forKey:@"homeEmail"];
}
if (CFStringCompare(currentEmailLabel, kABWorkLabel, 0) == kCFCompareEqualTo) {
[contactInfoDict setObject:(__bridge NSString *)currentEmailValue forKey:@"workEmail"];
}
CFRelease(currentEmailLabel);
CFRelease(currentEmailValue);
}
CFRelease(emailsRef);
// Addresss
ABMultiValueRef addressRef = ABRecordCopyValue(person, kABPersonAddressProperty);
if (ABMultiValueGetCount(addressRef) > 0) {
NSDictionary *addressDict = (__bridge NSDictionary *)ABMultiValueCopyValueAtIndex(addressRef, 0);
[contactInfoDict setObject:[addressDict objectForKey:(NSString *)kABPersonAddressStreetKey] forKey:@"address"];
[contactInfoDict setObject:[addressDict objectForKey:(NSString *)kABPersonAddressZIPKey] forKey:@"zipCode"];
[contactInfoDict setObject:[addressDict objectForKey:(NSString *)kABPersonAddressCityKey] forKey:@"city"];
}
CFRelease(addressRef);
// If Image exists
if (ABPersonHasImageData(person)) {
NSData *contactImageData = (__bridge NSData *)ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail);
[contactInfoDict setObject:contactImageData forKey:@"image"];
}
NSLog(@"Person :: %@",contactInfoDict);
// if (mutArrContactRecords == nil) {
// mutArrContactRecords = [[NSMutableArray alloc] init];
// }
// [mutArrContactRecords addObject:contactInfoDict];
return NO;
}
@end
==> Some Usefull related AddressBook Implemented And Importing:
#import <UIKit/UIKit.h>
#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
@import AddressBook;
==> Here Confrim Protocol Of ABPeoplePickerNavigationController:
@interface ViewController : UIViewController <ABPeoplePickerNavigationControllerDelegate>
{
NSMutableArray *mutArrContactRecords;
}
@property (nonatomic, strong) ABPeoplePickerNavigationController *addressBookController;
@end
========================================================================
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
==> For User Sise Ask Permssed and Set It :
if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusDenied || ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusRestricted) {
NSLog(@"Denied or restricted");
UIAlertView *cantAddContactAlert = [[UIAlertView alloc] initWithTitle: @"Cannot Add Contact" message: @"You must give the app permission to add the contact first." delegate:nil cancelButtonTitle: @"OK" otherButtonTitles: nil];
[cantAddContactAlert show];
}
else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized)
{
NSLog(@"Authorized");
}else{
// ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined
NSLog(@"Not Determinded");
}
ABAddressBookRequestAccessWithCompletion(ABAddressBookCreateWithOptions(NULL, nil), ^(bool granted, CFErrorRef error) {
dispatch_async(dispatch_get_main_queue(), ^{
if (!granted){
//4
NSLog(@"Just denied");
UIAlertView *cantAddContactAlert = [[UIAlertView alloc] initWithTitle: @"Cannot Add Contact" message: @"You must give the app permission to add the contact first." delegate:nil cancelButtonTitle: @"OK" otherButtonTitles: nil];
[cantAddContactAlert show];
return;
}
//5
NSLog(@"Just authorized");
});
});
[self getAllRecordsOfAddressBook];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
==> This Method Used Fo Getting All Record From AddressBookUI:
#pragma mark ----------------------
#pragma mark User Define Methods
- (void)getAllRecordsOfAddressBook
{
ABAddressBookRef aAddBook = ABAddressBookCreateWithOptions(NULL, nil);
NSArray *aArrRecords = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(aAddBook);
// NSLog(@"Records :: %@",aArrRecords);
[aArrRecords enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
ABRecordRef aRecPerson = (__bridge ABRecordRef) obj;
NSString *aStrFirstName = (__bridge NSString *) ABRecordCopyValue(aRecPerson, kABPersonFirstNameProperty);
NSString *aStrLastName = (__bridge NSString *) ABRecordCopyValue(aRecPerson, kABPersonLastNameProperty);
NSLog(@"Name :: %@ %@",aStrFirstName,aStrLastName);
ABMutableMultiValueRef aMultiPhoneNumbers = ABRecordCopyValue(aRecPerson, kABPersonPhoneProperty);
NSString *aStrPhoneNumber;
for (int aIntCnt = 0; aIntCnt < ABMultiValueGetCount(aMultiPhoneNumbers); aIntCnt++) {
CFStringRef aPhoneLable = ABMultiValueCopyLabelAtIndex(aMultiPhoneNumbers, aIntCnt);
CFStringRef aPhoneValue = ABMultiValueCopyValueAtIndex(aMultiPhoneNumbers, aIntCnt);
if (CFStringCompare(aPhoneLable, kABPersonPhoneMainLabel, 0) == kCFCompareEqualTo) {
aStrPhoneNumber = (__bridge NSString *)aPhoneValue;
NSLog(@"Name :: %@, %@ :: %@",aStrFirstName, aPhoneLable,aPhoneValue);
}
CFRelease(aPhoneLable);
CFRelease(aPhoneValue);
}
CFRelease(aMultiPhoneNumbers);
}];
}
==> Using AddressBookUI to Add Record In AddessBook:
- (IBAction)addRecordClicked:(id)sender {
[self addRecord];
}
==> To Showing And Displaying Recoerd of This Action Clicked in AddressBookUI:-
- (IBAction)showAddressBookClicked:(id)sender {
_addressBookController = [[ABPeoplePickerNavigationController alloc] init];
[_addressBookController setPeoplePickerDelegate:self];
[self presentViewController:_addressBookController animated:YES completion:nil];
}
- (void)addRecord
{
NSString *aStrFirstName = @"ILDC";
NSString *aStrLastName = @"IndiaNIC";
NSString *aStrPhNumber = @"8888888888";
NSData *aDtImage = UIImageJPEGRepresentation([UIImage imageNamed:@"car.jpg"], 1.0);
ABAddressBookRef aAddBookRef = ABAddressBookCreateWithOptions(NULL, nil);
ABRecordRef aRecRef = ABPersonCreate();
ABRecordSetValue(aRecRef, kABPersonFirstNameProperty, (__bridge CFStringRef)aStrFirstName, nil);
ABRecordSetValue(aRecRef, kABPersonLastNameProperty, (__bridge CFStringRef)aStrLastName, nil);
ABMutableMultiValueRef aPhoneNmbs = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMultiValueAddValueAndLabel(aPhoneNmbs, (__bridge CFStringRef)aStrPhNumber, kABPersonPhoneMainLabel, NULL);
ABRecordSetValue(aRecRef, kABPersonPhoneProperty, aPhoneNmbs, nil);
// To set Image
ABPersonSetImageData(aRecRef, (__bridge CFDataRef)aDtImage, nil);
NSArray *aArrRecords = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(aAddBookRef);
BOOL aBoolExists = NO;
__block BOOL ablockBoolExits = aBoolExists;
for (int aIntCnt = 0; aIntCnt < aArrRecords.count; aIntCnt++) {
ABRecordRef aRecPerson = (__bridge ABRecordRef) [aArrRecords objectAtIndex:aIntCnt];
if (CFStringCompare(ABRecordCopyCompositeName(aRecPerson),
ABRecordCopyCompositeName(aRecRef), 0) == kCFCompareEqualTo){
//The contact already exists!
NSLog(@"//The contact already exists!");
ablockBoolExits = YES;
break;
}
}
if (aBoolExists) {
return;
}
CFRelease(aPhoneNmbs);
CFRelease(aRecRef);
CFRelease(aAddBookRef);
[self getAllRecordsOfAddressBook];
}
#pragma mark ----------------------
#pragma mark ABPeople Picker Address Book Delegate Methods
-(void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker{
[_addressBookController dismissViewControllerAnimated:YES completion:nil];
}
- (void)peoplePickerNavigationController:(ABPeoplePickerNavigationController*)peoplePicker didSelectPerson:(ABRecordRef)person
{
NSMutableDictionary *contactInfoDict = [[NSMutableDictionary alloc]
initWithObjects:@[@"", @"", @"", @"", @"", @"", @"", @"", @""]
forKeys:@[@"firstName", @"lastName", @"mobileNumber", @"homeNumber", @"homeEmail", @"workEmail", @"address", @"zipCode", @"city"]];
CFTypeRef generalObj;
generalObj = ABRecordCopyValue(person, kABPersonFirstNameProperty);
if (generalObj) {
[contactInfoDict setObject:(__bridge NSString *)generalObj forKey:@"firstName"];
CFRelease(generalObj);
}
// Phone Numbers
ABMutableMultiValueRef aMultiPhoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
for (int i=0; i < ABMultiValueGetCount(aMultiPhoneNumbers); i++) {
CFStringRef currentPhoneLabel = ABMultiValueCopyLabelAtIndex(aMultiPhoneNumbers, i);
CFStringRef currentPhoneValue = ABMultiValueCopyValueAtIndex(aMultiPhoneNumbers, i);
if (CFStringCompare(currentPhoneLabel, kABPersonPhoneMobileLabel, 0) == kCFCompareEqualTo) {
[contactInfoDict setObject:(__bridge NSString *)currentPhoneValue forKey:@"mobileNumber"];
}
if (CFStringCompare(currentPhoneLabel, kABHomeLabel, 0) == kCFCompareEqualTo) {
[contactInfoDict setObject:(__bridge NSString *)currentPhoneValue forKey:@"homeNumber"];
}
CFRelease(currentPhoneLabel);
CFRelease(currentPhoneValue);
}
CFRelease(aMultiPhoneNumbers);
ABMultiValueRef emailsRef = ABRecordCopyValue(person, kABPersonEmailProperty);
for (int i=0; i<ABMultiValueGetCount(emailsRef); i++) {
CFStringRef currentEmailLabel = ABMultiValueCopyLabelAtIndex(emailsRef, i);
CFStringRef currentEmailValue = ABMultiValueCopyValueAtIndex(emailsRef, i);
if (CFStringCompare(currentEmailLabel, kABHomeLabel, 0) == kCFCompareEqualTo) {
[contactInfoDict setObject:(__bridge NSString *)currentEmailValue forKey:@"homeEmail"];
}
if (CFStringCompare(currentEmailLabel, kABWorkLabel, 0) == kCFCompareEqualTo) {
[contactInfoDict setObject:(__bridge NSString *)currentEmailValue forKey:@"workEmail"];
}
CFRelease(currentEmailLabel);
CFRelease(currentEmailValue);
}
CFRelease(emailsRef);
// Addresss
ABMultiValueRef addressRef = ABRecordCopyValue(person, kABPersonAddressProperty);
if (ABMultiValueGetCount(addressRef) > 0) {
NSDictionary *addressDict = (__bridge NSDictionary *)ABMultiValueCopyValueAtIndex(addressRef, 0);
[contactInfoDict setObject:[addressDict objectForKey:(NSString *)kABPersonAddressStreetKey] forKey:@"address"];
[contactInfoDict setObject:[addressDict objectForKey:(NSString *)kABPersonAddressZIPKey] forKey:@"zipCode"];
[contactInfoDict setObject:[addressDict objectForKey:(NSString *)kABPersonAddressCityKey] forKey:@"city"];
}
CFRelease(addressRef);
// If Image exists
if (ABPersonHasImageData(person)) {
NSData *contactImageData = (__bridge NSData *)ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail);
[contactInfoDict setObject:contactImageData forKey:@"image"];
}
NSLog(@"Person :: %@",contactInfoDict);
// if (mutArrContactRecords == nil) {
// mutArrContactRecords = [[NSMutableArray alloc] init];
// }
// [mutArrContactRecords addObject:contactInfoDict];
}
-(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person{
NSMutableDictionary *contactInfoDict = [[NSMutableDictionary alloc]
initWithObjects:@[@"", @"", @"", @"", @"", @"", @"", @"", @""]
forKeys:@[@"firstName", @"lastName", @"mobileNumber", @"homeNumber", @"homeEmail", @"workEmail", @"address", @"zipCode", @"city"]];
CFTypeRef generalObj;
generalObj = ABRecordCopyValue(person, kABPersonFirstNameProperty);
if (generalObj) {
[contactInfoDict setObject:(__bridge NSString *)generalObj forKey:@"firstName"];
CFRelease(generalObj);
}
// Phone Numbers
ABMutableMultiValueRef aMultiPhoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
for (int i=0; i < ABMultiValueGetCount(aMultiPhoneNumbers); i++) {
CFStringRef currentPhoneLabel = ABMultiValueCopyLabelAtIndex(aMultiPhoneNumbers, i);
CFStringRef currentPhoneValue = ABMultiValueCopyValueAtIndex(aMultiPhoneNumbers, i);
if (CFStringCompare(currentPhoneLabel, kABPersonPhoneMobileLabel, 0) == kCFCompareEqualTo) {
[contactInfoDict setObject:(__bridge NSString *)currentPhoneValue forKey:@"mobileNumber"];
}
if (CFStringCompare(currentPhoneLabel, kABHomeLabel, 0) == kCFCompareEqualTo) {
[contactInfoDict setObject:(__bridge NSString *)currentPhoneValue forKey:@"homeNumber"];
}
CFRelease(currentPhoneLabel);
CFRelease(currentPhoneValue);
}
CFRelease(aMultiPhoneNumbers);
ABMultiValueRef emailsRef = ABRecordCopyValue(person, kABPersonEmailProperty);
for (int i=0; i<ABMultiValueGetCount(emailsRef); i++) {
CFStringRef currentEmailLabel = ABMultiValueCopyLabelAtIndex(emailsRef, i);
CFStringRef currentEmailValue = ABMultiValueCopyValueAtIndex(emailsRef, i);
if (CFStringCompare(currentEmailLabel, kABHomeLabel, 0) == kCFCompareEqualTo) {
[contactInfoDict setObject:(__bridge NSString *)currentEmailValue forKey:@"homeEmail"];
}
if (CFStringCompare(currentEmailLabel, kABWorkLabel, 0) == kCFCompareEqualTo) {
[contactInfoDict setObject:(__bridge NSString *)currentEmailValue forKey:@"workEmail"];
}
CFRelease(currentEmailLabel);
CFRelease(currentEmailValue);
}
CFRelease(emailsRef);
// Addresss
ABMultiValueRef addressRef = ABRecordCopyValue(person, kABPersonAddressProperty);
if (ABMultiValueGetCount(addressRef) > 0) {
NSDictionary *addressDict = (__bridge NSDictionary *)ABMultiValueCopyValueAtIndex(addressRef, 0);
[contactInfoDict setObject:[addressDict objectForKey:(NSString *)kABPersonAddressStreetKey] forKey:@"address"];
[contactInfoDict setObject:[addressDict objectForKey:(NSString *)kABPersonAddressZIPKey] forKey:@"zipCode"];
[contactInfoDict setObject:[addressDict objectForKey:(NSString *)kABPersonAddressCityKey] forKey:@"city"];
}
CFRelease(addressRef);
// If Image exists
if (ABPersonHasImageData(person)) {
NSData *contactImageData = (__bridge NSData *)ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail);
[contactInfoDict setObject:contactImageData forKey:@"image"];
}
NSLog(@"Person :: %@",contactInfoDict);
// if (mutArrContactRecords == nil) {
// mutArrContactRecords = [[NSMutableArray alloc] init];
// }
// [mutArrContactRecords addObject:contactInfoDict];
return NO;
}
@end