Question

I'm facing a problem accessing the address book of my iPad 2. In particular I have problems retrieving the email of my contacts. What I want to do is to access the address book, retrieve my contacts and show them in a table view. Everything seems work fine since the name and the surname of the contacts are shown. The problem is with the email property since when I try to retrieve it I get an "EXC_BAD_ACCESS". The code i wrote to show the tableview record is the following:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *tableIdentifier = @"tableIdentifier";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:tableIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:tableIdentifier] autorelease];
    }

    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    cell.textLabel.backgroundColor = [UIColor clearColor];
    cell.detailTextLabel.backgroundColor = [UIColor clearColor];

    NSUInteger row = [indexPath row];

    NSString *firstName = (NSString *)ABRecordCopyValue([contacts objectAtIndex:row], kABPersonFirstNameProperty);
    NSString *lastName = (NSString *)ABRecordCopyValue([contacts objectAtIndex:row], kABPersonLastNameProperty);
    NSString *name = [[NSString alloc] initWithFormat:@"%@ %@", lastName,firstName];

    [firstName release];
    [lastName release];

    cell.textLabel.text = name;

    [name release];

    NSArray *emails = [[self getEmailForPerson:row] retain];

    /*......*/  

    return cell;
}

While the function to get the email of my contacts is the following:

- (NSArray *)getEmailForPerson:(NSInteger)index{
    //Create the array where emails will be stored
    NSMutableArray *m = [[[NSMutableArray alloc] init] autorelease];
    //Get the email properties
    ABMultiValueRef mails = ABRecordCopyValue([self.contacts objectAtIndex:index], kABPersonEmailProperty);
    //Iterate in the multi-value properties
    for (int i=0; i<ABMultiValueGetCount(mails); i++) {
        //Get the email
        NSString *mail = (NSString *) ABMultiValueCopyValueAtIndex(mails, i);
        //Add the email to the array previously initializated
        [m addObject:mail];
        [mail release];
    }
    CFRelease(mails);

    return m; 
}

When I run the debugger after this statement

ABMultiValueRef mails = ABRecordCopyValue([self.contacts objectAtIndex:index], kABPersonEmailProperty);

mails seems not initialized since its adress is 0x0 but I cannot understand why. I hope somebody can help me.

Thanks in advance

Was it helpful?

Solution

ABMultiValueRef mails = ABRecordCopyValue([self.contacts objectAtIndex:index], kABPersonEmailProperty);

It works fine in my app.

Check framework & self.contacts.

My app use two frameworks.

#import <AddressBook/AddressBook.h>
#import <AddressBook/ABAddressBook.h>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top