2009-11-10 5 views

Répondre

17

C'est un système complet Exemple de travail pour montrer une personne en créant un ABRecordRef et en le poussant dans la vue à l'aide d'un viewcontroller

////////////////////////////// Accrochez-le à une action personnalisée.

-(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]; 
} 

//////////////////////////// C'est le gars qui construit le 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; 
} 

//////////////////////////// fil dans l'en-tête:

Souvenez-vous d'importer ces cadres:

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

Définissez le déléguer

ABNewPersonViewControllerDelegate 

Et ajouter à l'interface

ABNewPersonViewController *newPersonController; 
+1

Merci, c'était une grande aide. –

+0

Si vous voulez ajouter des numéros de téléphone etc., c'est assez similaire à l'ajout de courrier. il suffit de regarder dans les propriétés;) – hfossli

+0

Vous devez également libérer addressDict après avoir ajouté l'adresse. –

0

De eyeballing, je pense au lieu de

ABMutableMultiValueRef address = ABMultiValueCreateMutable(kABMultiStringPropertyType); 

vous voulez

ABMutableMultiValueRef address = ABMultiValueCreateMutable(kABDictionaryPropertyType); 
+0

Vous me pointé dans la bonne direction. Ce devrait être kABMultiDictionaryPropertyType. – hfossli