2010-12-14 3 views
2

J'ai un gros problème ... Je prévois d'écrire une application qui traite le carnet d'adresses des utilisateurs et ses adresses. Tout va bien - sauf le fait que je ne suis pas en mesure de déterminer si le type d'addesse est "travail", "maison" ou "autre".Comment déterminer le type d'une adresse dans AddressBook FrameWork (iOS 4.2)

Est-ce que quelqu'un sait comment obtenir l'étiquette pour la maison, le travail et d'autres?

Merci à l'avance

Boris

Ceci est la fonction Je utilise au moment:

+ (void)testing { 
//Get the addressbook 
ABAddressBookRef _addressBookRef = ABAddressBookCreate(); 

//Fetch all contacts 
NSArray* allPeople  = (NSArray *)ABAddressBookCopyArrayOfAllPeople(_addressBookRef); 

//Walk the contacts 
for (id record in allPeople) { 
    //Get the contact´s id 
    NSInteger recordId = ABRecordGetRecordID((ABRecordRef)record); 

    //Get the contact´s name and company 
    NSString* recordName = (NSString *)ABRecordCopyCompositeName((ABRecordRef)record); 
    NSString* recordCompany = (NSString *)ABRecordCopyValue((ABRecordRef)record, kABPersonOrganizationProperty); 

    //Get the contact´s addresses 
    CFTypeRef adressesReference = ABRecordCopyValue((ABRecordRef)record, kABPersonAddressProperty); 
    NSArray *adressesArray = (NSArray *)ABMultiValueCopyArrayOfAllValues(adressesReference); 
    CFRelease(adressesReference); 

    NSLog(@"ID: %d", recordId); 
    NSLog(@"Name: %@", recordName); 
    NSLog(@"Firma: %@", recordCompany); 

    for (NSString *adress in adressesArray) { 
    NSLog(@"Adresse: %@", adress); 
    } 

    [adressesArray release]; 
} 

CFRelease(_addressBookRef); 
[allPeople release]; 
NSLog(@"\n"); 
} 

Et here's la sortie du journal:

ID: 1 Nom: Le premier utilisateur Firma: (null) Adresse: { Ville = Reutlingen ; Pays = Allemagne; CountryCode = de; Rue = "une rue"; ZIP = 23456; }

Adresse: { Ville = Reutlingen; Pays = Allemagne; CountryCode = de; Etat = BW; Rue = "Rue numéro 2"; ZIP = 98765; }

ID: 2 Nom: Le deuxième contact Firma: Firma Adresse: { Pays = "États-Unis"; CountryCode = us; Rue = Test; }

Répondre

10

Voici comment vous obtenez les valeurs de carnet d'adresses extraites:

ABMultiValueRef addresses = ABRecordCopyValue(ref, kABPersonAddressProperty); 
    for (CFIndex j = 0; j<ABMultiValueGetCount(addresses);j++){ 
     CFDictionaryRef dict = ABMultiValueCopyValueAtIndex(addresses, j); 
     CFStringRef typeTmp = ABMultiValueCopyLabelAtIndex(addreses, j); 
     CFStringRef labeltype = ABAddressBookCopyLocalizedLabel(typeTmp); 
     NSString *street = [(NSString *)CFDictionaryGetValue(dict, kABPersonAddressStreetKey) copy]; 
     NSString *city = [(NSString *)CFDictionaryGetValue(dict, kABPersonAddressCityKey) copy]; 
     NSString *state = [(NSString *)CFDictionaryGetValue(dict, kABPersonAddressStateKey) copy]; 
     NSString *zip = [(NSString *)CFDictionaryGetValue(dict, kABPersonAddressZIPKey) copy]; 
     NSString *country = [(NSString *)CFDictionaryGetValue(dict, kABPersonAddressCountryKey) copy]; 


     [street release]; 
     [city release]; 
     [state release]; 
     [zip release]; 
     [country release]; 
     CFRelease(dict); 
     CFRelease(type); 
     CFRelease(typeTmp); 
    } 
     CFRelease(addresses); 

le type d'étiquette est ce que vous recherchez.

bonne chance Shani

+0

Salut est-il possible de convertir à la version rapide? – user998405

+0

Je vais essayer de le faire bientôt. Merci – shannoga

Questions connexes