Как добавить контакт из моего приложения в адресную книгу iOS

Я хотел бы добавить возможность сохранять контакт (номер телефона, имя, адрес и адрес электронной почты) в адресной книге iOS, нажав кнопку в моем приложении! Как я могу это сделать?


person Claudio    schedule 26.07.2010    source источник


Ответы (3)


Это так просто, и следуйте инструкциям ниже,

Во-первых, вам нужно импортировать следующие фреймворки,

#import <AddressBook/AddressBook.h>

#import <AddressBookUI/AddressBookUI.h

Во-вторых, напишите следующий код в действии кнопки и измените код в соответствии с вашими потребностями,

        NSString * addressString1 = [appDelegate getCurrentSummary];

        NSString * addressString2 = [appDelegate getCurrentTubeImage];

        NSString * cityName = [appDelegate getCurrentcheckValue];

        NSString * stateName = [appDelegate getCurrentTubeUrl];

        NSString * postal = [appDelegate getCurrentViews];

        NSString * emailString = [appDelegate getCurrentLink];

        NSString * phoneNumber = [appDelegate getCurrentTitle];

        NSString * prefName = [appDelegate getCurrentAuthor];

        ABAddressBookRef libroDirec = ABAddressBookCreate();

        ABRecordRef persona = ABPersonCreate();

        ABRecordSetValue(persona, kABPersonFirstNameProperty, prefName, nil);

            ABMutableMultiValueRef multiHome = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);

            NSMutableDictionary *addressDictionary = [[NSMutableDictionary alloc] init];

            NSString *homeStreetAddress=[addressString1 stringByAppendingString:addressString2];

            [addressDictionary setObject:homeStreetAddress forKey:(NSString *) kABPersonAddressStreetKey];

            [addressDictionary setObject:cityName forKey:(NSString *)kABPersonAddressCityKey];

            [addressDictionary setObject:stateName forKey:(NSString *)kABPersonAddressStateKey];

            [addressDictionary setObject:postal forKey:(NSString *)kABPersonAddressZIPKey];

            bool didAddHome = ABMultiValueAddValueAndLabel(multiHome, addressDictionary, kABHomeLabel, NULL);

            if(didAddHome)
            {
                ABRecordSetValue(persona, kABPersonAddressProperty, multiHome, NULL);

                NSLog(@"Address saved.....");
            }

            [addressDictionary release];

        //##############################################################################

        ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutable(kABMultiStringPropertyType);

        bool didAddPhone = ABMultiValueAddValueAndLabel(multiPhone, phoneNumber, kABPersonPhoneMobileLabel, NULL);

        if(didAddPhone){

            ABRecordSetValue(persona, kABPersonPhoneProperty, multiPhone,nil);

            NSLog(@"Phone Number saved......");

        }

        CFRelease(multiPhone);

        //##############################################################################

        ABMutableMultiValueRef emailMultiValue = ABMultiValueCreateMutable(kABPersonEmailProperty);

        bool didAddEmail = ABMultiValueAddValueAndLabel(emailMultiValue, emailString, kABOtherLabel, NULL);

        if(didAddEmail){

        ABRecordSetValue(persona, kABPersonEmailProperty, emailMultiValue, nil); 

        NSLog(@"Email saved......");
        }

        CFRelease(emailMultiValue);

        //##############################################################################

        ABAddressBookAddRecord(libroDirec, persona, nil);

        CFRelease(persona);

        ABAddressBookSave(libroDirec, nil);

        CFRelease(libroDirec);

        NSString * errorString = [NSString stringWithFormat:@"Information are saved into Contact"];

         UIAlertView * errorAlert = [[UIAlertView alloc] initWithTitle:@"New Contact Info" message:errorString delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];

         [errorAlert show];

        [errorAlert release];

}

Надеюсь, это вам поможет!

person Sivanathan    schedule 26.07.2010
comment
Спасибо большое, отлично работает !!! Я хотел спросить у вас еще одну вещь, как я могу сделать, чтобы также установить изображение контакта ??? - person Claudio; 26.07.2010
comment
@Claudio перейдите по ссылке, у него есть решение iphonedevsdk.com/forum/iphone-sdk-development/ - person Sivanathan; 26.07.2010

Вот код для добавления изображения контакта с изображением человека в адресную книгу Iphone

ABAddressBookRef addressBook = ABAddressBookCreate();
ABRecordRef person = ABPersonCreate();

// Добавить изображение человека

NSData *dataRef = UIImagePNGRepresentation(personImageView.image);
ABPersonSetImageData(person, (CFDataRef)dataRef, nil);

CFErrorRef  anError = NULL;

// Полное имя, название компании, свойство обозначения

ABRecordSetValue(person,kABPersonFirstNameProperty,full_name,&anError);
ABRecordSetValue(person, kABPersonOrganizationProperty, companyLabel, &anError);
ABRecordSetValue(person, kABPersonJobTitleProperty, designation, &anError);

// Свойство адреса с несколькими значениями

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

[addressDictionary setObject:@"Chicago" forKey:(NSString *)kABPersonAddressCityKey];
[addressDictionary setObject:@"IL" forKey:(NSString *)kABPersonAddressStateKey];
[addressDictionary setObject:@"60654" forKey:(NSString *)kABPersonAddressZIPKey];

ABMultiValueAddValueAndLabel(multiAddress, addressDictionary, (CFStringRef)@"Address", NULL);
ABRecordSetValue(person, kABPersonAddressProperty, multiAddress,&anError);
    CFRelease(multiAddress);

ABMutableMultiValueRef websiteMultiValue = ABMultiValueCreateMutable(kABPersonURLProperty);
ABMultiValueAddValueAndLabel(websiteMultiValue, web_URL, (CFStringRef)@"Website", NULL);
ABRecordSetValue(person, kABPersonURLProperty, websiteMultiValue, &anError);


ABMutableMultiValueRef emailMultiValue = ABMultiValueCreateMutable(kABPersonEmailProperty);
ABMultiValueAddValueAndLabel(emailMultiValue, email, (CFStringRef)@"Email", NULL);
ABRecordSetValue(person, kABPersonEmailProperty, emailMultiValue, &anError);

ABAddressBookAddRecord(addressBook, person, &anError);
person Shahab Qureshi    schedule 13.10.2011

Если кто-то ищет способ добавить информацию об адресе (улица, город, штат, почтовый индекс) в Swift, он плохо документирован на веб-сайте Apple. Вот как я это сделал (в примере указаны только адреса) ...

var addressDictionary: [String:String] = [
    kABPersonAddressStreetKey as String: Contact.address_1,
    kABPersonAddressCityKey as String: Contact.city,
    kABPersonAddressStateKey as String: Contact.state,
    kABPersonAddressZIPKey as String: Contact.zip
]

let multiWork: ABMutableMultiValue = 
  ABMultiValueCreateMutable(
    ABPropertyType(kABMultiDictionaryPropertyType)).takeRetainedValue()
ABMultiValueAddValueAndLabel(multiWork, addressDictionary, kABWorkLabel, nil)
ABRecordSetValue(person, kABPersonAddressProperty, multiWork, nil)
person Justin Domnitz    schedule 30.06.2015