{"id":4422,"date":"2010-09-20T11:19:32","date_gmt":"2010-09-20T09:19:32","guid":{"rendered":"http:\/\/www.devapp.it\/wordpress\/?p=4422"},"modified":"2010-09-20T11:19:32","modified_gmt":"2010-09-20T09:19:32","slug":"t071-accesscontact-accediamo-ai-dati-dei-contatti-nelle-nostre-iphone-app","status":"publish","type":"post","link":"https:\/\/www.devapp.it\/wordpress\/t071-accesscontact-accediamo-ai-dati-dei-contatti-nelle-nostre-iphone-app\/","title":{"rendered":"T#071 &#8211; AccessContact, accediamo ai dati dei contatti nelle nostre iPhone App"},"content":{"rendered":"<p><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-00.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-00.jpg\" alt=\"T071 Access Contact - Accedere ai contatti iPhone xcode 00\" title=\"t071-access-contact-accedere-ai-contatti-iphone-xcode-00\" width=\"100\" height=\"100\" class=\"alignleft size-full wp-image-4436\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-00.jpg 150w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-00-92x92.jpg 92w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-00-64x64.jpg 64w\" sizes=\"auto, (max-width: 100px) 100vw, 100px\" \/><\/a> 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&#8217;applicazione nativa &#8220;Contatti&#8221; 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!<!--more--><\/p>\n<h4>1. Definiamo il nuovo progetto<\/h4>\n<p>Aprimo Xcode, selezioniamo \u201cFile -> New Project\u201d. Nel men\u00f9 che ci appare selezioniamo \u201cView-based Application\u201d, clicchiamo su \u201cChoose\u2026\u201d e immettiamo come nome \u201cAccessContact\u201d e fate clic su \u201cSave\u201d. Abbiamo cos\u00ec creato il nostro nuovo progetto.<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-01.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-01.jpg\" alt=\"T071 Access Contact - Accedere ai contatti iphone xcode 01\" title=\"t071-access-contact-accedere-ai-contatti-iphone-xcode-01\" width=\"500\" height=\"368\" class=\"aligncenter size-full wp-image-4424\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-01.jpg 500w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-01-300x220.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-01-150x110.jpg 150w\" sizes=\"auto, (max-width: 500px) 100vw, 500px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Apriamo il file \u201cAccessContactViewController.h\u201d, che \u00e8 la classe della vista che ci viene fornita con questo template. Inseriamo il seguente codice:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n#import <UIKit\/UIKit.h>\r\n#import <AddressBook\/AddressBook.h>\r\n#import <AddressBookUI\/AddressBookUI.h>\r\n \r\n@interface AccessContactViewController : UIViewController {\r\n\tIBOutlet UILabel *labelNome;\r\n\tIBOutlet UILabel *labelCognome;\r\n\tIBOutlet UILabel *labelTel;\r\n}\r\n \r\n- (IBAction)getContatto;\r\n \r\n@end\r\n<\/pre>\n<p>Avrete subito capito che abbiamo definito tre label e un\u2019azione. Alle righe 2 e 3, per\u00f2, abbiamo importato due librerie, che si riferiscono ad \u201cAddressBook\u201d, ovvero all\u2019applicazione \u201cContatti\u201d. Questo, per\u00f2, non basta per poter utilizzare tutte le sue funzioni. Dobbiamo importare all\u2019interno del nostro progetto anche il framework necessario.<\/p>\n<p>Espandete la sezione \u201cTargets\u201d nel progetto, e cliccate con il tasto destro su \u201cAccessContact\u201d, selezionando poi \u201cGet Info\u201d. Si aprir\u00e0 una nuova schermata, in cui dobbiamo andare nella se- zione \u201cGeneral\u201d. Nell\u2019angolo in basso a sinistra noteremo un bottone \u201c+\u201d, clicchiamo e si aprir\u00e0 un elenco di tutti i framework disponibili:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-02.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-02.jpg\" alt=\"T071 Access Contact - Accedere ai contatti iphone xcode 02\" title=\"t071-access-contact-accedere-ai-contatti-iphone-xcode-02\" width=\"386\" height=\"332\" class=\"aligncenter size-full wp-image-4425\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-02.jpg 386w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-02-300x258.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-02-150x129.jpg 150w\" sizes=\"auto, (max-width: 386px) 100vw, 386px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Selezioniamo \u201cAddressBook.framework\u201d e \u201cAddressBookUI.framework\u201d e clicchiamo poi su \u201cAdd\u201d. Avremo cos\u00ec aggiunto questi due framework al nostro progetto. Possiamo cos\u00ec chiudere<\/p>\n<p>la schermata delle propriet\u00e0. Salviamo il file \u201cAccessContactViewController.h\u201d e facciamo doppio clic su<\/p>\n<p>\u201cAccessContactViewControlle.xib\u201d per aprire Interface Builder.<\/p>\n<h4>2. Importiamo il framework necessario<\/h4>\n<p>Dobbiamo ora definire l\u2019aspetto grafico della nostra applicazione. Inseriamo le label necessarie e un bottone, per ricreare un aspetto grafico come questo:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-03.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-03.jpg\" alt=\"T071 Access Contact - Accedere ai contatti iphone xcode 03\" title=\"t071-access-contact-accedere-ai-contatti-iphone-xcode-03\" width=\"400\" height=\"582\" class=\"aligncenter size-full wp-image-4426\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-03.jpg 400w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-03-206x300.jpg 206w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-03-103x150.jpg 103w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Le label con il testo \u201c\u2014\u201d sono quelle che poi conterranno le informazioni sul contatto selezio- nato dall\u2019utente. Dobbiamo ora collegare gli elementi definiti in precedenza con quelli che abbiamo appena inserito nella vista. Tramite il pannello dei documenti selezioniamo \u201cFile\u2019s Owner\u201d, e apriamo il \u201cConnections Inspector\u201d. Potremo vedere i componenti che abbiamo dichiarato:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-04.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-04.jpg\" alt=\"T071 Access Contact - Accedere ai contatti iphone xcode 04\" title=\"t071-access-contact-accedere-ai-contatti-iphone-xcode-04\" width=\"301\" height=\"253\" class=\"aligncenter size-full wp-image-4427\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-04.jpg 301w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-04-300x252.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-04-150x126.jpg 150w\" sizes=\"auto, (max-width: 301px) 100vw, 301px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Ora dobbiamo collegarli nella maniera corretta, ovviamente in base al nome con cui li abbiamo chiamati: \u201clabelNome\u201d, quindi, andr\u00e0 collegata con la label a fianco di \u201cNome\u201d e cos\u00ec via. L\u2019azione \u201cgetContatto\u201d, invece, sar\u00e0 da collegare al bottone, scegliendo come sempre \u201cTouch Up Inside\u201d tra le azioni disponibili. Ecco il risultato finale dei collegamenti:<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-05.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-05.jpg\" alt=\"T071 Access Contact - Accedere ai contatti iphone xcode 05\" title=\"t071-access-contact-accedere-ai-contatti-iphone-xcode-05\" width=\"301\" height=\"253\" class=\"aligncenter size-full wp-image-4428\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-05.jpg 301w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-05-300x252.jpg 300w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-05-150x126.jpg 150w\" sizes=\"auto, (max-width: 301px) 100vw, 301px\" \/><\/a><br \/>\n<\/center><\/p>\n<p>Possiamo salvare tutto e chiudere Interface Builder.<\/p>\n<h4>3. Scriviamo il codice necessario<\/h4>\n<p>Dobbiamo ora implementare i metodi necessari per far funzionare l\u2019applicazione. Iniziamo con la definizione del metodo \u201cgetContatto\u201d, ovvero l\u2019azione collegata alla pressione del bottone. Apriamo il file \u201cAccessContactViewController.m\u201d e inseriamo il seguente codice:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n#import \"AccessContactViewController.h\"\r\n \r\n@implementation AccessContactViewController\r\n \r\n-(IBAction)getContatto {\r\n\t\/\/Crea il picker\r\n\tABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];\r\n\t\/\/Imposta il delegate del picker come vista principale\r\n\tpicker.peoplePickerDelegate = self;\r\n\t\/\/Visualizza il picker\r\n\t[self presentModalViewController:picker animated:YES];\r\n\t\/\/Rilascio\r\n\t[picker release];\r\n}\r\n<\/pre>\n<p>Come si pu\u00f2 leggere dai commenti, questo metodo istanzia un oggetto chiamato \u201cpicker\u201d, che ci permetter\u00e0 di aprire l\u2019applicazione nativa \u201cContatti\u201d. Alla riga 9 definiamo il delegato di tale oggetto: impostando \u201cself\u201d, comunichiamo che sar\u00e0 la stessa classe (ovvero \u201cAccessContactViewController\u201d) a definire gli altri metodi necessari, che definiremo tra poco. Alla riga 11, infine, inseriamo tale oggetto come vista principale della nostra applicazione: l\u2019utente vedr\u00e0 cos\u00ec comparire l\u2019applicazione nativa \u201cContatti\u201d all\u2019interno della nostra applicazione \u201cAccessContact\u201d.<\/p>\n<p>Dobbiamo ora implementare i metodi richiesti dal delegato. Ecco il codice da inserire:<\/p>\n<pre lang=\"objc\" line=\"1\" escaped=\"true\">\r\n- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {\r\n\t\/\/Settiamo il nome\r\n    labelNome.text = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);\r\n\t\/\/Settiamo il cognome\r\n    labelCognome.text = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);\r\n\t\/\/Settiamo il numero di telefono\r\n\tABMultiValueRef multi = ABRecordCopyValue(person, kABPersonPhoneProperty);\r\n\tlabelTel.text = (NSString*)ABMultiValueCopyValueAtIndex(multi, 0);\r\n\t\/\/Rimuove il controller \"Contatti\"\r\n    [self dismissModalViewControllerAnimated:YES];\r\n    return NO;\r\n}\r\n \r\n- (void)peoplePickerNavigationControllerDidCancel:(ABPeoplePickerNavigationController *)peoplePicker {\r\n    \/\/ facciamo tornare il controller alla vista principale\r\n\t[self dismissModalViewControllerAnimated:YES];\r\n}\r\n<\/pre>\n<p>Il primo metodo legge le informazioni del contatto selezionato, e le setta nelle apposite label. L\u2019unico inconveniente \u00e8 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\u00f9 numeri). E se non vi fosse nessun numero associato al contatto? In tal caso l\u2019applicazione crasha. Questo avviene perch\u00e9 non abbiamo effettuato nessun controllo, ma potete semplicemente risolvere questo problema tramite un opportuno ciclo if.<\/p>\n<p>Il metodo che inizia alla riga 15, infine, si occupa di chiudere l\u2019applicazione \u201cContatti\u201d quando l\u2019utente sceglie di uscire senza selezionare nessun contatto (ovvero quando clicca su \u201cCancel\u201d). Potete notare che l\u2019istruzione di tale metodo \u00e8 uguale a quella presente alla riga 10, che \u00e8 uguale a sua volta a quella presente alla riga 7 del primo metodo implementato.<\/p>\n<p>Cliccate su \u201cBuild and Go!\u201d e testate la vostra applicazione!<\/p>\n<p><center><br \/>\n<a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-06.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-06.jpg\" alt=\"T071 Access Contact - Accedere ai contatti iphone xcode 06\" title=\"t071-access-contact-accedere-ai-contatti-iphone-xcode-06\" width=\"414\" height=\"770\" class=\"aligncenter size-full wp-image-4429\" srcset=\"https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-06.jpg 414w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-06-161x300.jpg 161w, https:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-access-contact-accedere-ai-contatti-iphone-xcode-06-80x150.jpg 80w\" sizes=\"auto, (max-width: 414px) 100vw, 414px\" \/><\/a><br \/>\n<\/center><\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-AccessContact.zip\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/05\/download_icon.png\" alt=\"\" width=\"33\" height=\"40\" align=\"middle\" \/><\/a> Se avete problemi con il tutorial, <a href=\"http:\/\/www.devapp.it\/wordpress\/wp-content\/uploads\/2010\/09\/t071-AccessContact.zip\">questo \u00e8 il nostro file di progetto.<\/a><\/p>\n<p><em><br \/>\nLa guida \u00e8 stata tradotta in italiano e ampliata da Andrea Busi per &#8220;devAPP&#8221;. Trovare la guida originale a questo indirizzo: &#8220;<a href=\"http:\/\/iphone.zcentric.com\/2008\/09\/19\/access-the-address-book\/\" target=\"_blank\">Access the Address Book: Iphone Noob<\/a>&#8220;.  I meriti delle rispettive versioni, quindi, sono dei legittimi autori.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eccoci con un nuovo tutorial di programmazione iPhone (sicuramente utile anche durante lo sviluppo di applicazioni per&#8230;<\/p>\n","protected":false},"author":254,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[398,399,400,402,401,403,216],"class_list":["post-4422","post","type-post","status-publish","format-standard","hentry","category-tutorial-pratici","tag-accedere-ai-contatti-xcode","tag-access-contact-iphone-sdk","tag-addressbook","tag-addressbook-framework","tag-addressbookui","tag-addressbookui-framework","tag-andrea-busi"],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/4422","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/users\/254"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/comments?post=4422"}],"version-history":[{"count":10,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/4422\/revisions"}],"predecessor-version":[{"id":4442,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/posts\/4422\/revisions\/4442"}],"wp:attachment":[{"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/media?parent=4422"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/categories?post=4422"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devapp.it\/wordpress\/wp-json\/wp\/v2\/tags?post=4422"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}