2010-07-06 4 views
-1

Le problème est que je reçois toujours des plantages à l'exécution à toute méthode appelée à phones variable. À cette version, j'obtiens une erreur au 1 (ABMultiValueCopyValueAtIndex). Si je commente cette ligne, le code se bloque à 2 (ABMultiValueGetCount). Il semble que la propriété était vide. Si je NSLog la variable phones. Je reçois (null). Je teste le code sur iPhone Simulator, j'ai quelques faux contacts là-bas avec quelques numéros de téléphone. Aussi firstName et lastName fonctionnent comme un charme.Comment gérer plusieurs propriétés dans le carnet d'adresses de l'iPhone?

for(id person in people){ 
    NSString *firstName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty); 
    NSString *lastName = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty); 
    ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty); 
    NSString *phone = (NSString*)ABMultiValueCopyValueAtIndex(phones, 0); /*1*/ 
/*2/ id ph, phLb; 
    for (CFIndex i = 0; i < ABMultiValueGetCount(phones); i++) { 
     phLb = ABMultiValueCopyLabelAtIndex(phones, i); 
     ph = ABMultiValueCopyValueAtIndex(phones, i); 
     NSLog(@"%@,%@", phLb, ph); 
     CFRelease(phLb); 
     CFRelease(ph); 
    } 
*/ 
NSLog(@"%@", firstName); 
NSLog(@"%@", lastName); 
NSLog(@"%@", phones); 
NSLog(@"%@", phone); 

[firstName release]; 
[lastName release]; 
[phone release]; 
[phones release]; 

}

+1

Ainsi est votre question comment gérer null? – slf

+0

Ma question est, comment obtenir les numéros du carnet d'adresses. Les chiffres sont là, mais je suis en quelque sorte nul. – Alistra

Répondre

0

Le code:

addressBook = ABAddressBookCreate(); 
people = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook); 
CFRelease(addressBook); 

désallouée le répertoire et tous les objets qui ont été reffered de sa sortie aussi. Ainsi, les pointeurs sur MultiValueRefs ont été désalloués avant utilisation.

-4

Apprendre à utiliser un débogueur. En outre, votre code fuit.

+0

Je sais qu'il fuit. Je voudrais d'abord le faire fonctionner, puis conserver toutes les variables. – Alistra

+0

Si vous ne savez rien sur AddressBook, alors ne répondez pas à la question, tc. Merci! –

0

Je pense que vos hypothèses sur la façon d'obtenir un ABMultiValueRef sont fausses. Je n'ai pas mon code AB à portée de main sur cet ordinateur, mais vérifiez que ABRecordCopyValue est la méthode appropriée. Ensuite, faites des recherches sur ABMultiValueRef pour savoir comment accéder à son contenu. C'est un ensemble d'objets complètement différent des chaînes simples.

+0

Comme vous le voyez dans la partie commentée. J'ai essayé avec le type d'identification et cela n'a pas fonctionné non plus. Je pense que cet exemple est presque copié-collé à partir de la documentation Apple, que comment utiliser la partie multiRef. Je vais vérifier demain au travail. – Alistra

Questions connexes