Search code examples
iphoneios5ios6ios7

my contact not add in addressbook in ios 7


I am a beginner in iOS development; this code is working in iOS 6 but does not work in iOS 7 ... My code is below, I want to add contacts into my address book. I am developing an app where I have gone through many links, and I have following code, but now I am stuck...

I have imported:

#import <AddressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>

ViewController.m file

ABAddressBookRef ab = ABAddressBookCreate();
    // To add a new ab entry with telephone number
    ABRecordRef newPerson = ABPersonCreate();

    ABRecordSetValue(newPerson, kABPersonFirstNameProperty, (__bridge CFStringRef) nameFirststr, nil);

    ABRecordSetValue(newPerson, kABPersonLastNameProperty, (__bridge CFStringRef)@"Jones", nil);

    //phone
    ABMutableMultiValueRef phoneNumberMultiValue =  ABMultiValueCreateMutable(kABMultiStringPropertyType);
    ABMultiValueAddValueAndLabel(phoneNumberMultiValue ,(__bridge CFStringRef)myphone,kABPersonPhoneMobileLabel, NULL);
    ABRecordSetValue(newPerson, kABPersonPhoneProperty,  phoneNumberMultiValue, nil);

    // Adreess
    ABMutableMultiValueRef multiAddress = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);
    NSMutableDictionary *addressDictionary = [[NSMutableDictionary alloc] init];

    if (Address)
    {
        if (Address)
            addressDictionary[(NSString *) kABPersonAddressStreetKey] = [NSString stringWithFormat:@"%@\n%@", Address, Address];
        else
            addressDictionary[(NSString *) kABPersonAddressStreetKey] = Address;

        //    if (true)
        //        addressDictionary[(NSString *)kABPersonAddressCityKey] = @"city";
        //    if (true)
        //        addressDictionary[(NSString *)kABPersonAddressStateKey] = @"city";
        //    if (true)
        //        addressDictionary[(NSString *)kABPersonAddressZIPKey] = @"city";
        //    if (true)
        //        addressDictionary[(NSString *)kABPersonAddressCountryKey] = @"city";
    }


    ABMultiValueAddValueAndLabel(multiAddress, (__bridge CFDictionaryRef) addressDictionary, kABWorkLabel, NULL);

    ABRecordSetValue(newPerson, kABPersonAddressProperty, multiAddress, nil);

    // email

    if (emailstr)
    {
        ABMutableMultiValueRef emailMultiValue = ABMultiValueCreateMutable(kABMultiStringPropertyType);
        ABMultiValueAddValueAndLabel(emailMultiValue, (__bridge CFStringRef) emailstr, kABWorkLabel, NULL);

        ABRecordSetValue(newPerson, kABPersonEmailProperty, emailMultiValue, nil);
    }
    if (Organization)
    {
        ABRecordSetValue(newPerson, kABPersonOrganizationProperty, (__bridge CFStringRef)Organization, nil);

    }
    if (title)
    {
        ABRecordSetValue(newPerson, kABPersonJobTitleProperty, (__bridge CFStringRef)title, nil);

    }
    if (notes)
    {
        ABRecordSetValue(newPerson, kABPersonNoteProperty, (__bridge CFStringRef)notes, nil);
    }


    if (webUrl)
    {

        ABMutableMultiValueRef urlMultiValue = ABMultiValueCreateMutable(kABMultiStringPropertyType);
        ABMultiValueAddValueAndLabel(urlMultiValue, (__bridge CFStringRef) webUrl, kABPersonHomePageLabel, NULL);
        ABRecordSetValue(newPerson, kABPersonURLProperty, urlMultiValue, nil);
    }

    ABAddressBookAddRecord(ab, newPerson, nil);
    ABAddressBookSave(ab,NULL);
    if (ABAddressBookSave(ab, nil)) {
        NSLog(@"\nPerson Saved successfuly");
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"Your contact sucessfully Add" delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];
        [alert show];
    } else {
        NSLog(@"\n Error Saving person to AddressBook");
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:@"Error...!!!" delegate:self cancelButtonTitle:nil otherButtonTitles:@"Ok", nil];
        [alert show];
    }

Solution

  • check if addressbook is allowed

        ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);
    
    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) {
        ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) {
            // First time access has been granted, add the contact
            [self addContact];
        });
    }
    else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) {
        // The user has previously given access, add the contact
        [self addContact];
    }
    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Access Denied" message:@"Please give access to AddressBook via settings." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
        [alert show];
        // The user has previously denied access
        // Send an alert telling user to change privacy setting in settings app
    }
    

    also replace first line

        CFErrorRef * error = NULL;
        ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);