Apple propose l'exemple de code suivant dans son projet QuickContacts pour savoir comment rechercher dans le carnet d'adresses d'un utilisateur particulier.Comment rechercher un carnet d'adresses iPhone pour un nom d'utilisateur spécifique basé sur une variable et non sur une chaîne
-(void)showPersonViewController
{
// Fetch the address book
ABAddressBookRef addressBook = ABAddressBookCreate();
// Search for the person named "Appleseed" in the address book
CFArrayRef people = ABAddressBookCopyPeopleWithName(addressBook, CFSTR("Appleseed"));
// Display "Appleseed" information if found in the address book
if ((people != nil) && (CFArrayGetCount(people) > 0))
{
ABRecordRef person = CFArrayGetValueAtIndex(people, 0);
ABPersonViewController *picker = [[[ABPersonViewController alloc] init] autorelease];
picker.personViewDelegate = self;
picker.displayedPerson = person;
// Allow users to edit the person’s information
picker.allowsEditing = YES;
[self.navigationController pushViewController:picker animated:YES];
}
else
{
// Show an alert if "Appleseed" is not in Contacts
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
message:@"Could not find Appleseed in the Contacts application"
delegate:nil
cancelButtonTitle:@"Cancel"
otherButtonTitles:nil];
[alert show];
[alert release];
}
CFRelease(addressBook);
CFRelease(people);
}
La ligne que je vais avoir du mal avec est:
// Search for the person named "Appleseed" in the address book
CFArrayRef people = ABAddressBookCopyPeopleWithName(addressBook, CFSTR("Appleseed"));
Cela recherche dans le carnet d'adresses pour la personne nommée « Appleseed », mais je veux rechercher le carnet d'adresses basé sur un utilisateur qui est stocké dans une variable. Par exemple, j'essaye:
Customer *customer = [customerArray objectAtIndex:indexPath.row];
cell.textLabel.text = customer.name;
CFArrayRef people = ABAddressBookCopyPeopleWithName(addressBook, CFSTR(customer.name));
Le "customer.name" ne résout pas à la valeur qui est stockée. J'ai utilisé NSLog pour afficher la valeur de customer.name et il contient la valeur attendue.
Comment puis-je résoudre cette variable en une chaîne de sorte qu'il recherchera correctement le carnet d'adresses?
Merci!
client est un tableau, devrais-je être en mesure de lancer "customer.name" comme un tableau similaire à la façon dont vous l'avez montré comme un NSString? – scottystang
Selon votre exemple de code, customerArray (et non client) est un tableau d'objets Customer, client est un objet de type Customer et nom est une propriété de l'objet Customer. "name" semble être de type NSString puisque vous l'affectez à cell.textLabel.text. Dans tous les cas, vous devez passer un CFStringRef à cette méthode de carnet d'adresses. Un CFStringRef pointe vers une chaîne - pas un tableau. – DyingCactus
Merci, cela aide à éclaircir les choses. Cependant, lorsque j'essaie de lancer customer.name en tant que CFStringRef, j'obtiens "EXC_BAD_ACCESS" dans la console lorsqu'elle touche cette ligne. Des idées? – scottystang