In iPhone application development it is required to fetch the contact detail that are saved in the contact list of iPhone.
So here is the program that will help you to fetch the detail of the contact with name number and contact image, if the image is not found a default image will be used .
This is a class where we are fetching the detail of the contact and can access them anywhere in the app where it is necessary to to use the contact detail.
@interface Contact : NSObject
@property (nonatomic,retain) NSString *firstName;
@property (nonatomic,retain) NSString *lastName;
@property(nonatomic,retain)NSString *mobileNumber;
@property(nonatomic,retain)NSString *fullName;
@property(nonatomic,readwrite)int contactId;
@property(nonatomic,retain) UIImage *ContactImage;
-(NSMutableArray *)getAllContacts;
@end
#import "Contact.h"
#import <AddressBook/AddressBook.h>
@implementation Contact
-(NSDictionary *)ContactListMapping
{
return [[NSDictionary alloc]initWithObjectsAndKeys:@"firstName",@"firstname", @"lastName",@"lastname",@"mobileNumber",@"phoneNumber",@"fullName",@"fullname",@"contactId",@"contactid",@"contactImage",@"imgData,nil];
}
-(NSMutableArray *)getAllContacts
{
CFErrorRef *error = nil;
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);
ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook);
CFArrayRef allPeople = (ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByFirstName));
CFIndex nPeople = CFArrayGetCount(allPeople);
NSMutableArray* items = [NSMutableArray arrayWithCapacity:nPeople];
if (!allPeople || !nPeople) {
NSLog(@"people nil");
}
for (int i = 0; i < nPeople; i++) {
//data model
Contact *contacts = [Contact new];
ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i);
//get First Name
CFStringRef firstName = (CFStringRef)ABRecordCopyValue(person,kABPersonFirstNameProperty);
contacts.firstName = [(__bridge NSString*)firstName copy];
if (firstName != NULL) {
CFRelease(firstName);
}
//get Last Name
CFStringRef lastName = (CFStringRef)ABRecordCopyValue(person,kABPersonLastNameProperty);
contacts.lastName = [(__bridge NSString*)lastName copy];
if (lastName != NULL) {
CFRelease(lastName);
}
if (!contacts.firstName) {
contacts.firstName = @"";
}
if (!contacts.lastName) {
contacts.lastName = @"";
}
contacts.contactId = ABRecordGetRecordID(person) ;
//Get the full name of contact
contacts.fullName = [NSString stringWithFormat:@"%@ %@", contacts.firstName, contacts.lastName];
// get contacts picture, if pic doesn't exists, show standart one here I am using a image ConatactImage.png
CFDataRef imgData = ABPersonCopyImageData(person);
NSData *imageData = (__bridge NSData *)imgData;
contacts.contactImage = [UIImage imageWithData:imageData];
if (imgData != NULL) {
CFRelease(imgData);
}
if (!contacts.ContactImage) {
contacts.ContactImage = [UIImage imageNamed:@"ConatactImage.png"];
}
//get Phone Numbers
NSMutableArray *phoneNumbers = [[NSMutableArray alloc] init];
ABMultiValueRef multiPhones = ABRecordCopyValue(person, kABPersonPhoneProperty);
for(CFIndex i=0; i<ABMultiValueGetCount(multiPhones); i++) {
@autoreleasepool {
CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(multiPhones, i);
NSString *phoneNumber = CFBridgingRelease(phoneNumberRef);
if (phoneNumber != nil){
[phoneNumbers addObject:phoneNumber];
contacts.mobileNumber=[phoneNumber copy];
}
}
}
if (multiPhones != NULL) {
CFRelease(multiPhones);
}
[items addObject:contacts];
} //autoreleasepool
CFRelease(allPeople);
CFRelease(addressBook);
CFRelease(source);
return items;
}
@end
0 Comment(s)