Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Gestire i contatti di iOS con Xcode

Come creare un'applicazione che utilizzi la tecnologia Address Book per accedere ai contatti salvati dagli utenti e renderli disponibili ad altre applicazioni
Come creare un'applicazione che utilizzi la tecnologia Address Book per accedere ai contatti salvati dagli utenti e renderli disponibili ad altre applicazioni
Link copiato negli appunti

Address Book è la tecnologia di iOS per la memorizzazione dei contatti degli utenti in un database centralizzato e l’accesso di altre applicazioni a queste informazioni. È, in altre parole, l'infrastruttura che gestisce la rubrica, di un dispositivo iOS che può essere messa a disposizione delle altre applicazione per gestire, ad esempio, la condivisione di risorse o le chiamate telefoniche e così via. La tecnologia comprende:

  • Un database.
  • I framework AddressBook e AddressBookUI.
  • L’applicazione Contacts in iOS.

In questo articolo impareremo a interagire con i contatti dell’utente tramite i due framework elencati in precedenza e per farlo avremo bisogno di

  • XCode 4.6 disponibile gratuitamente sul Mac App Store
  • OS X 10.7.4 o successivo.
  • Un Mac.
  • Il PeoplePicker

    Per eseguire alcune operazioni comuni sulla rubrica, iOS mette a disposizione dei controller già pronti come il PeoplePicker (il nome completo è ABPeoplePickerNavigationController ma per semplicità lo chiameremo semplicemente PeoplePicker) che permette di presentare all’utente la lista dei contatti per sceglierne uno.

    È anche possibile creare un’interfaccia personalizzata ma si raccomanda di utilizzare questo controller quando si deve eseguire questo tipo di compito in modo da fornire all’utente un’esperienza coerente con il resto del sistema operativo.

    Preparazione del progetto

    Creiamo dunque il nostro progetto. Per prima cosa apriamo XCode 4.6 e scegliamo File / New / Project... Nella colonna di sinistra scegliamo Application (dal riquadro iOS) e nell’area di destra scegliamo Single View Application:

    Premiamo Next

    • Product Name MyAddressBookApp
    • Organization Name
    • Company Identifier www.html.it it.html
    • Bundle Identifier Company Identifier Product Name
    • Class Prefix

    Scegliamo iPhone dal campo Devices.

    Selezioniamo infine Storyboards e Use Automatic Reference Counting, due componenti che velocizzano enormemente i tempi di sviluppo e permettono di scrivere meno "boilerplate code" (codice ripetitivo).

    Premiamo Next Create Documenti

    Lasciamo qualche secondo a Xcode per generare tutti i file necessari e premiamo CMD + R

    Viene visualizzata una schermata bianca, si tratta del nostro view controller: MABAViewController

    Applicare il pattern delegate

    Tra poco prepareremo un pulsante che, una volta premuto dall’utente, visualizzi un PeoplePicker contenente la lista dei contatti presenti nella rubrica in modo da permette all’utente di selezionarne uno. Quando un contatto viene selezionato il PeoplePicker comunica al suo delegate la scelta effettuata dall’utente: si tratta di un classico esempio di delegation pattern in iOS.

    Avremo bisogno di una classe che possa funzionare come delegate del PeoplePicker, che abbia, in altre parole, alcuni metodi specifici: un buon candidato è il nostro MABAViewController.

    Lo useremo nella prossima pagina.

    Implementare il protocollo ABPeoplePickerNavigationControllerDelegate

    Dobbiamo fare in modo che MABAViewController implementi il protocollo ABPeoplePickerNavigationControllerDelegate.

    Apriamo il file MABAViewController.h e modifichiamolo come mostrato di seguito:

      • Nella schermata principale selezioniamo la voce MyAddressBookApp TARGETS

    • Scendiamo in fondo fino alla sezione Linked Frameworks and Libraries
    • Premiamo il pulsante +.
    • Scegliamo AddressBookUI.framework Add

    Il framework è apparso nel Navigator di Xcode sotto la radice del progetto, dobbiamo trascinarlo nel gruppo Frameworks come mostrato di seguito.

    Se premiamo CMD + B warning

    Il problema è che, pur avendo dichiarato il nostro view controller come un delegate del PeoplePicker, non abbiamo implementato i metodi obbligatori

    Apriamo MABAViewController.m @end

    - (void)peoplePickerNavigationControllerDidCancel: (ABPeoplePickerNavigationController *)peoplePicker { 
    [self dismissViewControllerAnimated:YES completion: nil]; 
    }
    - (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person { 
    [self dismissViewControllerAnimated: YES completion: nil]; 
    return NO; 
    }
    - (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson: (ABRecordRef)person property: (ABPropertyID)property identifier: (ABMultiValueIdentifier)identifier { 
    return NO; 
    }

    Questi metodi vengono chiamati dal PeoplePicker rispettivamente quando:

    • L’utente preme Annulla
    • L’utente seleziona un contatto.
    • L’utente seleziona una proprietà di un contatto.

    Finalmente, premendo CMD + B

    Il pulsante per visualizzare il PeoplePicker

    Creeremo ora un pulsante e collegheremo l’azione del toccare il pulsante alla visualizzazione del PeoplePicker.

      • Dal pannello Navigator selezioniamo MainStoryboard.storyboard
      • Accertiamoci che la Object Library View Utilities Show Object Library

      • Cerchiamo l’oggetto Round Rect Button

    Colleghiamo la pressione di questo pulsante all’esecuzione di un nuovo metodo:

    1. Scegliamo View Assistant Editor Show Assistant Editor
    2. Ora l’area principale dovrebbe essere divisa in 2 parti, a sinistra MainStoryboard.storyboard MABAViewController.h
    3. Facciamo click destro sul pulsante che abbiamo creato poco fa.
    4. Posizioniamo il puntatore sul cerchietto bianco accanto alla voce Touch Down
    5. Teniamo premuto il click principale e trasciniamo il puntatore sul codice di MABAViewController.h @end
    6. Rilasciamo il click principale.

    È apparsa una finestra che ci chiede il nome da assegnare al nuovo metodo: digitiamo showPeoplePicker Connect

    Xcode ha inserito la dichiarazione del metodo showPeoplePicker

    Modifichiamolo come mostrato di seguito.

    - (IBAction)showPeoplePicker:(id)sender {
    ABPeoplePickerNavigationController * peoplePicker = [[ABPeoplePickerNavigationController alloc] init];
    peoplePicker.peoplePickerDelegate = self;
    [self presentViewController: peoplePicker animated: YES completion: nil];
    }
    • La prima
    • La seconda
    • La terza

    A questo punto premiamo CMD + R e verifichiamo quel che accade. Effettivamente ora premendo il pulsante Seleziona un contatto appare la lista dei contatti dell’utente (se la lista è vuota usate il simulatore come fosse un iPhone, premete Home, accedete all’applicazione Contacts e inserite almeno un contatto popolando First Name, Last Name, Birthday e Phone).

    Infine possiamo selezionare un contatto o premere Cancel.

    Le proprietà Single-Value

    Quello che vorremmo fare ora è ricevere dal PeoplePicker l’identificativo del contatto selezionato dall’utente in modo da poter estrarre il suo nome, cognome e data di nascita.

    Ancora una volta applichiamo il pattern delegate, infatti come abbiamo visto in precedenza, appena l’utente seleziona un contatto il PeoplePicker invoca il seguente metodo della nostra classe MABAViewController (il secondo dei tre copiati in precedenza, ovvero quello che riceve solo due parametri)

    La prima seconda

    ABRecordCopyValue(person, kABPersonFirstNameProperty)

    Le successive 2

    La lista dei campi che possiamo estrarre è la seguente:

    • kABPersonFirstNameProperty;
    • kABPersonLastNameProperty;
    • kABPersonMiddleNameProperty;
    • kABPersonPrefixProperty;
    • kABPersonSuffixProperty;
    • kABPersonNicknameProperty;
    • kABPersonFirstNamePhoneticProperty;
    • kABPersonLastNamePhoneticProperty;
    • kABPersonMiddleNamePhoneticProperty;
    • kABPersonOrganizationProperty;
    • kABPersonJobTitleProperty;
    • kABPersonDepartmentProperty;
    • kABPersonEmailProperty;
    • kABPersonBirthdayProperty;
    • kABPersonNoteProperty;
    • kABPersonCreationDateProperty;
    • kABPersonModificationDateProperty;

    La quinta riga concatena il nome e il cognome.

    La sesta dichiara un puntatore di tipo NSString e il costrutto if Nato nel [ANNO DI NASCITA]

    Infine viene inizializzato un oggetto UIAlertView titleMessage message

    Se proviamo a compilare (CMD + B ABRecordCopyValue kABPersonNameProperty kABPersonLastNameProperty

    • Selezioniamo la radice del progetto dal pannello Navigator
    • Scegliamo MyAddressBookApp sotto la voce TARGET .
    • Scendiamo fino alla sezione Linked Framework and Libraries .
    • Aggiungiamo AddressBook.framework .
    • Usiamo il pannello Navigator per spostare il framework nel gruppo Frameworks .

    Ora apriamo il file MABAViewController.h @interface

    #import <AddressBook/AddressBook.h>

    Finalmente possiamo premere CMD + R

    Le proprietà Multi-value

    Vediamo ora come gestire le proprietà Multi-Value di un contatto come ad esempio il numero di telefono. Si tratta di tipi proprietà che possono ricorrere più volte all’interno di una contatto e ognuna di esse è definita come una coppia (label, value).

    Dichiariamo un nuovo metodo nel file MABAViewController.h come mostrato di seguito (il codice va incollato prima dell’istruzione @end).

    - (void)displayPhoneNumbersFromPerson: (ABRecordRef)person;

    Questo metodo riceverà un singolo parametro che identifica un contatto della rubrica e mostrerà un messaggio di popup contenente la lista di tutti i numeri di telefono associati a quel contatto.

    Apriamo ora MAVAViewController.m e implementiamo il nuovo metodo come descritto di seguito.

    Il metodo definisce una variabile adatta a contenere una lista di valori Multi-Value e la popola estraendo dal contatto (identificato dalla variabile person ABRecordCopyValue kABPersonePhoneProperty

    Poi estrae dalla rubrica il nome del contatto selezionato.

    Il costrutto for AVMultiValueCopyLabelAtIndex ABAddressBookCopyLocalizedLabel

    Inoltre usa ABMultiValueCopyValueAtIndex

    Dobbiamo ora modificare il metodo

    (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson: (ABRecordRef)person

    come mostrato di seguito

    - (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson: (ABRecordRef)person {
    	[self dismissViewControllerAnimated:YES completion:nil];
    	[self displayPhoneNumbersFromPerson: person];
        	return NO;
    }

    La prima riga nasconde il PeoplePicker, la seconda chiama il nostro nuovo metodo e la terza restituisce al PeoplePicker il valore booleano NO

    Premiamo CMD + R

Ti consigliamo anche