开发者

Getting iPhone addressbook contents without GUI

I would like to list all phone numbers (or any other field) of people in the addressbook.

I've written the following code:

- (void)addressBookFill{
    ABAddressBookRef addressBook = ABAddressBookCreate();
    people = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
    [ad开发者_如何学GodressBook release];
}

- (void)printAddressBook{
    for(id person in people){
        NSLog(@"%@", [person class]);
        NSLog(@"\t%@", person );
    }
}

When I invoke the printAddressBook method I get this on my console:

2010-07-06 10:34:11.998 app[91420:207] __NSCFType
2010-07-06 10:34:11.999 app[91420:207]  <CPRecord: 0x5d56ce0 ABPerson>

And I don't have any idea, how to dereference this ABPerson object, how to get any info from it.

I tried:

firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty);

but I got some exceptions.

Can anybody tell me how to get some info from these objects?


Read the documentation about the ABPerson class:
http://developer.apple.com/mac/library/documentation/UserExperience/Reference/AddressBook/Classes/ABPerson_Class/Reference/Reference.html

and also the ABRecord class:

http://developer.apple.com/mac/library/documentation/UserExperience/Reference/AddressBook/Classes/ABRecord_Class/Reference/Reference.html#//apple_ref/occ/cl/ABRecord

[ person valueForProperty: @"propName" ]

You can get the available properties with:

[ ABPerson properties ]

[ EDIT ]

On iPhone, you can use the following code to access a value:

NSString * lastName = (NSString *)ABRecordCopyValue( person, kABPersonLastNameProperty );


May be this code will help you for iOS5, please like it

ABAddressBookRef addressBook = ABAddressBookCreate();
    NSArray *arrayOfAllPeople = (__bridge_transfer NSArray *) ABAddressBookCopyArrayOfAllPeople(addressBook);
    NSUInteger peopleCounter = 0; 
    for (peopleCounter = 0;peopleCounter < [arrayOfAllPeople count]; peopleCounter++){
        ABRecordRef thisPerson = (__bridge ABRecordRef) [arrayOfAllPeople objectAtIndex:peopleCounter];
        NSString *name = (__bridge_transfer NSString *) ABRecordCopyCompositeName(thisPerson);
        NSLog(@"First Name = %@", name);  

        ABMultiValueRef emails = ABRecordCopyValue(thisPerson, kABPersonEmailProperty);

        for (NSUInteger emailCounter = 0; emailCounter < ABMultiValueGetCount(emails); emailCounter++){
            /* And then get the email address itself */ 
            NSString *email = (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(emails, emailCounter);
            NSLog(@"Email : %@",email);
        }
    } 
    CFRelease(addressBook);


You want get only those contact who has email on my contact so use this code for iOS5

Please like it if it work

First add AddressBook.framework and #import <AddressBook/AddressBook.h>

 - (NSArray*)printAddressBook{
        NSMutableArray *mutableData = [NSMutableArray new];
        ABAddressBookRef addressBook = ABAddressBookCreate();
        NSArray *arrayOfAllPeople = (__bridge_transfer NSArray *) ABAddressBookCopyArrayOfAllPeople(addressBook);
        NSUInteger peopleCounter = 0; 
        for (peopleCounter = 0;peopleCounter < [arrayOfAllPeople count]; peopleCounter++){
            ABRecordRef thisPerson = (__bridge ABRecordRef) [arrayOfAllPeople objectAtIndex:peopleCounter];
            NSString *name = (__bridge_transfer NSString *) ABRecordCopyCompositeName(thisPerson);
            NSLog(@"First Name = %@", name);  

            ABMultiValueRef emails = ABRecordCopyValue(thisPerson, kABPersonEmailProperty);

            for (NSUInteger emailCounter = 0; emailCounter < ABMultiValueGetCount(emails); emailCounter++){
                /* And then get the email address itself */ 
                NSString *email = (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(emails, emailCounter);
                NSLog(@"Email : %@",email);
                NSMutableDictionary *personDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:name,@"name",email,@"email", nil];
                [mutableData addObject:personDict];
            }
        } 
        CFRelease(addressBook);
       return [NSArray arrayWithArray:mutableData];
    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜