2010-05-02 5 views
0

J'utilise un TextField où l'utilisateur tape un numéro de téléphone. Lorsque le TextField change, il doit vérifier si ce numéro est déjà dans le répertoire et afficher le nom. Jusqu'ici, mon seul moyen est d'analyser tous les noms et les nombres dans un Dict et de le lire à partir de là.Nom donné par le numéro de téléphone sur l'iPhone

Existe-t-il une façon plus simple, plus efficace et plus sophistiquée de faire cela?

Répondre

0

Il ne serait pas difficile de déchirer le carnet d'adresses de l'utilisateur et de créer un numéro de téléphone pour le mappage de personne. Le Address Book Programming Guide présente toutes les informations sur le fonctionnement du framework.

+0

je ne peux pas voir une autre façon aussi. mais merci quand même –

0

Pour fermer et terminer cette question est ici la partie principale de ma solution:

ABAddressBookRef m_addressbook = ABAddressBookCreate(); 
if (!m_addressbook) { 
    NSLog(@"opening address book"); 
} 

CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(m_addressbook); 
CFIndex nPeople = ABAddressBookGetPersonCount(m_addressbook); 

[.....] 

adressList = [[NSMutableDictionary alloc] init]; 

for (int i=0;i < nPeople;i++) { 
    ABRecordRef ref = CFArrayGetValueAtIndex(allPeople,i); 

    vorname = ABRecordCopyValue(ref, kABPersonFirstNameProperty); 
    nachname = ABRecordCopyValue(ref, kABPersonLastNameProperty); 
    nameTag = [NSString stringWithFormat:@"%@ %@.", vorname, nachname]; 

    ABMultiValueRef phones =(NSString*)ABRecordCopyValue(ref, kABPersonPhoneProperty); 

    // Loop thru all numbers of a person 

    for(CFIndex i = 0; i < ABMultiValueGetCount(phones); i++) { 
     tmpNumber = (NSString*)ABMultiValueCopyValueAtIndex(phones, i); 
     tmpNumber = [self cleanupPhoneNumber:tmpNumber]; 
     [adressList setObject: nameTag forKey:tmpNumber]; 
     NSLog(@"Name: %@ | Phone: %@", nameTag, tmpNumber); 
    } 
} 
+0

Vous devez libérer 'vorname',' nachname', 'phones' et' tmpNumber', car ils sont tous produits par une fonction qui a 'Copy' dans le nom. Aussi, vous fuyez explicitement 'tmpNumber' parce que vous obtenez une référence à un objet avec un nombre de retenue de +1, ils perdent immédiatement la référence lorsque vous l'exécutez' cleanupPhoneNumber: ' –

+0

vous avez raison, merci –