Добавить контакт в адресную книгу в iphone objective-c

Как правильно указать почтовый адрес и т. Д. В адресной книге и позволить пользователю сохранить его на iphone?

РЕДАКТИРОВАТЬ: удалил конкретную проблему с кодом и сделал ее более общей


person hfossli    schedule 10.11.2009    source источник


Ответы (2)


Это полный рабочий пример того, как показать человека, создав ABRecordRef и вставив его в представление с помощью контроллера представления

///////////////////////////// Подключите его к настраиваемому действию.

-(IBAction)addToAddressbook:(id)sender{  
    ABUnknownPersonViewController *unknownPersonViewController = [[ABUnknownPersonViewController alloc] init];
    unknownPersonViewController.displayedPerson = (ABRecordRef)[self buildContactDetails];
    unknownPersonViewController.allowsAddingToAddressBook = YES;
    [self.navigationController pushViewController:unknownPersonViewController animated:YES];
    [unknownPersonViewController release]; 
}

//////////////////////////// Это парень, который строит ABrecordRef

- (ABRecordRef)buildContactDetails {
    NSLog(@"building contact details");
    ABRecordRef person = ABPersonCreate(); 
    CFErrorRef  error = NULL;  

    // firstname
    ABRecordSetValue(person, kABPersonFirstNameProperty, @"Don Juan", NULL);

    // email
    ABMutableMultiValueRef email = ABMultiValueCreateMutable(kABMultiStringPropertyType);
    ABMultiValueAddValueAndLabel(email, @"[email protected]", CFSTR("email"), NULL);
    ABRecordSetValue(person, kABPersonEmailProperty, email, &error);
    CFRelease(email); 

    // Start of Address
    ABMutableMultiValueRef address = ABMultiValueCreateMutable(kABMultiDictionaryPropertyType);  
    NSMutableDictionary *addressDict = [[NSMutableDictionary alloc] init];
    [addressDict setObject:@"The awesome road numba 1" forKey:(NSString *)kABPersonAddressStreetKey];   
    [addressDict setObject:@"0568" forKey:(NSString *)kABPersonAddressZIPKey];  
    [addressDict setObject:@"Oslo" forKey:(NSString *)kABPersonAddressCityKey]; 
    ABMultiValueAddValueAndLabel(address, addressDict, kABWorkLabel, NULL);
    ABRecordSetValue(person, kABPersonAddressProperty, address, &error); 
    [addressDict release];
    CFRelease(address); 
    // End of Address

    if (error != NULL) 
        NSLog(@"Error: %@", error);

    [(id)person autorelease];
    return person;
}

//////////////////////////// Подключаемся в шапку:

Не забудьте импортировать эти фреймворки:

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

Установите делегата

ABNewPersonViewControllerDelegate

И добавьте это в интерфейс

ABNewPersonViewController *newPersonController;
person hfossli    schedule 11.11.2009
comment
если вы хотите добавить телефонные номера и т. д. irc, это очень похоже на добавление почты. просто загляните в свойства;) - person hfossli; 15.02.2010
comment
Вам также необходимо отпустить addressDict после добавления адреса. - person Christopher Pickslay; 26.01.2011

Глядя на это, я думаю, вместо того, чтобы

ABMutableMultiValueRef address = ABMultiValueCreateMutable(kABMultiStringPropertyType);

вы хотите

ABMutableMultiValueRef address = ABMultiValueCreateMutable(kABDictionaryPropertyType);
person Josh Bleecher Snyder    schedule 10.11.2009
comment
Ты указал мне правильное направление. Это должно быть kABMultiDictionaryPropertyType. - person hfossli; 11.11.2009