Добавить контакт в адресную книгу в iphone goal-c - PullRequest
4 голосов
/ 10 ноября 2009

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

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

Ответы [ 2 ]

17 голосов
/ 11 ноября 2009

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

///////////////////////////// Подключите его к пользовательскому действию.

-(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, @"expert.in@computer.com", 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;
0 голосов
/ 10 ноября 2009

От глазного яблока, думаю, вместо

ABMutableMultiValueRef address = ABMultiValueCreateMutable(kABMultiStringPropertyType);

хочешь

ABMutableMultiValueRef address = ABMultiValueCreateMutable(kABDictionaryPropertyType);
...