2009-12-08 4 views
1

J'ai pu utiliser le SDK pour accéder aux contacts du carnet d'adresses, mais chaque fois que je choisis un contact qui est une entreprise, mon application tombe en panne.iPhone SDK Accès au carnet d'adresses de la société contact

Est-ce que quelqu'un connaît la propriété pour le domaine de l'entreprise? Est-ce que quelqu'un connaît le code pour le faire fonctionner?

merci à l'avance

+0

c'est un problème avec votre code, mais vous n'en avez posté aucun. – wkw

+0

Betcha lorsque vous récupérez le nom du contact, vous ne vérifiez pas «NULL». –

Répondre

0

vous devez utiliser kABPersonOrganizationProperty propriété pour obtenir le nom de l'entreprise de addressbook

1

Il semble que votre question n'a rien à voir étiquette de l'entreprise elle-même. Les champs AB doivent être gérés avec soin, libérés lorsqu'ils ne sont pas utilisés et vérifiés pendant tout le temps, de nombreux champs ne sont pas définis.

En principe, voici un exemple de comment je l'utilise. Cette fonction charge les contacts (les champs intéressés par mon application) et renvoie le tableau avec les contacts à l'appelant. J'espère que c'est utile. Notez comment je libère les refs non nécessaires.

- (NSArray *)loadContacts 
{ 
     ABAddressBookRef addressBook = ABAddressBookCreate(); 
     CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); 
     CFIndex nPeople = ABAddressBookGetPersonCount(addressBook); 
     NSMutableArray *contacts = [NSMutableArray array]; 

     for (int i = 0 ; i < nPeople ; i++) { 
       ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i); 
       NSString *firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty); 
       NSString *lastName = ABRecordCopyValue(person, kABPersonLastNameProperty); 

       NSString *fullName; 

       if (firstName && lastName) { 
         fullName = [NSString stringWithFormat:@"%@ %@", firstName, lastName]; 
       } else { 
         if (firstName) { 
           fullName = [NSString stringWithString:firstName]; 
         } else if (lastName) { 
           fullName = [NSString stringWithString:lastName]; 
         } else { 
           continue; 
         } 
       } 

       NSString *email = nil; 
       ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty); 

       if (emails) { 
         NSArray *emailAddresses = [(NSArray *)ABMultiValueCopyArrayOfAllValues(emails) autorelease]; 
         if (emailAddresses && [emailAddresses count] > 0) 
           email = [emailAddresses objectAtIndex:0]; 
         CFRelease(emails); 
       } 
       if (email) { 
         NSDictionary *contact = [NSDictionary 
               dictionaryWithObjectsAndKeys:fullName, @"name", 
               email, @"email", nil]; 
         [contacts addObject:contact]; 
       } 
       if (firstName) 
         CFRelease(firstName); 
       if (lastName) 
         CFRelease(lastName); 
     } 

     CFRelease(allPeople); 
     CFRelease(addressBook); 
     return contacts; 
}