Eccoci con un nuovo tutorial di programmazione iPhone (sicuramente utile anche durante lo sviluppo di applicazioni per iPad), grazie al quale vi insegneremo come interfacciarvi con l’applicazione nativa “Contatti” presente di default nei device Apple. Vedremo come richiamarla da una nostra applicazione e come ricavare i dati di uno specifico contatto selezionato. Insomma, un utile strumento che potrebbe trovare ampio utilizzo in molte applicazioni! Ma ora basta chiacchiere, partiamo subito con il nostro tutorial!
1. Definiamo il nuovo progetto
Aprimo Xcode, selezioniamo “File -> New Project”. Nel menù che ci appare selezioniamo “View-based Application”, clicchiamo su “Choose…” e immettiamo come nome “AccessContact” e fate clic su “Save”. Abbiamo così creato il nostro nuovo progetto.

Apriamo il file “AccessContactViewController.h”, che è la classe della vista che ci viene fornita con questo template. Inseriamo il seguente codice:
#import
#import
#import
@interface AccessContactViewController : UIViewController {
IBOutlet UILabel *labelNome;
IBOutlet UILabel *labelCognome;
IBOutlet UILabel *labelTel;
}
- (IBAction)getContatto;
@end
Avrete subito capito che abbiamo definito tre label e un’azione. Alle righe 2 e 3, però, abbiamo importato due librerie, che si riferiscono ad “AddressBook”, ovvero all’applicazione “Contatti”. Questo, però, non basta per poter utilizzare tutte le sue funzioni. Dobbiamo importare all’interno del nostro progetto anche il framework necessario.
Espandete la sezione “Targets” nel progetto, e cliccate con il tasto destro su “AccessContact”, selezionando poi “Get Info”. Si aprirà una nuova schermata, in cui dobbiamo andare nella se- zione “General”. Nell’angolo in basso a sinistra noteremo un bottone “+”, clicchiamo e si aprirà un elenco di tutti i framework disponibili:

Selezioniamo “AddressBook.framework” e “AddressBookUI.framework” e clicchiamo poi su “Add”. Avremo così aggiunto questi due framework al nostro progetto. Possiamo così chiudere
la schermata delle proprietà. Salviamo il file “AccessContactViewController.h” e facciamo doppio clic su
“AccessContactViewControlle.xib” per aprire Interface Builder.
2. Importiamo il framework necessario
Dobbiamo ora definire l’aspetto grafico della nostra applicazione. Inseriamo le label necessarie e un bottone, per ricreare un aspetto grafico come questo:

Le label con il testo “—” sono quelle che poi conterranno le informazioni sul contatto selezio- nato dall’utente. Dobbiamo ora collegare gli elementi definiti in precedenza con quelli che abbiamo appena inserito nella vista. Tramite il pannello dei documenti selezioniamo “File’s Owner”, e apriamo il “Connections Inspector”. Potremo vedere i componenti che abbiamo dichiarato:

Ora dobbiamo collegarli nella maniera corretta, ovviamente in base al nome con cui li abbiamo chiamati: “labelNome”, quindi, andrà collegata con la label a fianco di “Nome” e così via. L’azione “getContatto”, invece, sarà da collegare al bottone, scegliendo come sempre “Touch Up Inside” tra le azioni disponibili. Ecco il risultato finale dei collegamenti:

Possiamo salvare tutto e chiudere Interface Builder.
3. Scriviamo il codice necessario
Dobbiamo ora implementare i metodi necessari per far funzionare l’applicazione. Iniziamo con la definizione del metodo “getContatto”, ovvero l’azione collegata alla pressione del bottone. Apriamo il file “AccessContactViewController.m” e inseriamo il seguente codice:
#import "AccessContactViewController.h"
@implementation AccessContactViewController
-(IBAction)getContatto {
//Crea il picker
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
//Imposta il delegate del picker come vista principale
picker.peoplePickerDelegate = self;
//Visualizza il picker
[self presentModalViewController:picker animated:YES];
//Rilascio
[picker release];
}
Come si può leggere dai commenti, questo metodo istanzia un oggetto chiamato “picker”, che ci permetterà di aprire l’applicazione nativa “Contatti”. Alla riga 9 definiamo il delegato di tale oggetto: impostando “self”, comunichiamo che sarà la stessa classe (ovvero “AccessContactViewController”) a definire gli altri metodi necessari, che definiremo tra poco. Alla riga 11, infine, inseriamo tale oggetto come vista principale della nostra applicazione: l’utente vedrà così comparire l’applicazione nativa “Contatti” all’interno della nostra applicazione “AccessContact”.
Dobbiamo ora implementare i metodi richiesti dal delegato. Ecco il codice da inserire:
- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {
//Settiamo il nome
labelNome.text = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
//Settiamo il cognome
labelCognome.text = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);
//Settiamo il numero di telefono
ABMultiValueRef multi = ABRecordCopyValue(person, kABPersonPhoneProperty);
labelTel.text = (NSString*)ABMultiValueCopyValueAtIndex(multi, 0);
//Rimuove il controller "Contatti"
[self dismissModalViewControllerAnimated:YES];
return NO;
}
- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker {
// facciamo tornare il controller alla vista principale
[self dismissModalViewControllerAnimated:YES];
}
Il primo metodo legge le informazioni del contatto selezionato, e le setta nelle apposite label. L’unico inconveniente è dato dalle righe 7 e 8, che si occupano della lettura del numero di telefono: viene letto il primo numero presente (in quanto potrebbero anche esserci più numeri). E se non vi fosse nessun numero associato al contatto? In tal caso l’applicazione crasha. Questo avviene perché non abbiamo effettuato nessun controllo, ma potete semplicemente risolvere questo problema tramite un opportuno ciclo if.
Il metodo che inizia alla riga 15, infine, si occupa di chiudere l’applicazione “Contatti” quando l’utente sceglie di uscire senza selezionare nessun contatto (ovvero quando clicca su “Cancel”). Potete notare che l’istruzione di tale metodo è uguale a quella presente alla riga 10, che è uguale a sua volta a quella presente alla riga 7 del primo metodo implementato.
Cliccate su “Build and Go!” e testate la vostra applicazione!

Se avete problemi con il tutorial, questo è il nostro file di progetto.
La guida è stata tradotta in italiano e ampliata da Andrea Busi per “devAPP”. Trovare la guida originale a questo indirizzo: “Access the Address Book: Iphone Noob“. I meriti delle rispettive versioni, quindi, sono dei legittimi autori.









8 Responses to “T#071 – AccessContact, accediamo ai dati dei contatti nelle nostre iPhone App”
20 Settembre 2010
Tweets that mention T#071 - AccessContact, accediamo ai dati dei contatti nelle nostre iPhone App | devAPP -- Topsy.com[…] This post was mentioned on Twitter by Rynox, devAPP and iPadWorld.it, Bubi Devs. Bubi Devs said: T#071 – AccessContact, accediamo ai dati dei contatti nelle nostre iPhone App: Eccoci con un nuovo tutorial di pro… http://bit.ly/9w0lHT […]
20 Settembre 2010
PaoloC’è un modo per mettere tutti i dati del contatto in una table?
E come potrei fare per modificare i dati del contatto scelto tramite le ui predisposte?
1 Ottobre 2010
Andrea Busiper la modifica non saprei, non so quali funzioni Apple mette a disposizione.
Per inserire i valori in una table, invece, ti basta salvare i dati letti in alcune variabili (o in un oggetto predisposto), per poi visualizzarli tramite una classica tabella..
13 Dicembre 2010
PugiaGrazie Andrea, i tuoi tutorial sono fantastici!
Mi chiedevo come fare a far scegliere all’utente quale numero di telefono prendere nel caso in cui ce ne siano più di uno…mi sai dare una mano? 😉
31 Gennaio 2011
BiroCiao ragazzi!
Ottimo tutorial..quello che mi chiedevo è….e se si volesse anche visualizzare anche l’immagine del contatto come faccio? la guida dice che sono cose separate…ma onestamente obj-C mi sembra sempre più ostico…
1 Aprile 2011
barbygirlanche io ho la stessa necessità di Pugia, scegliere quale numero utilizzare.
Per prenderli tutti non ho avuto problemi, ho utilizzato un array, ma adesso come faccio a far scegliere il numero che voglio?
io scrivo i numeri in una o più UILAbel, come faccio ad acquisire quello che mi serve?
grazie
18 Ottobre 2011
barbygirlseguendo questo tutorial sono riuscita a far visualizzare i contatti come nell’applicazione nativa “Contatti” ma con delle modifiche nei dati secondo mie esigenze, ho però un problema: se io volessi tornare indietro, dove c’è il pulsante “acquisisci contatti” come devo fare? al momento l’unico modo che ho è chiudere l’applicazione e farla riaprtire, ma nn è per niente bello. Mi sapete dare indicazioni?
6 Aprile 2013
DevTutorial #7 – AccessContact, accediamo ai dati dei contatti - Bubi Devs[…] Leggi il tutorial completo su devAPP […]