Video: Web Programming - Computer Science for Business Leaders 2016 2024
IOS-rammeverket gir funksjoner som gjør at appen din kan fungere med databasene som kom med iOS-enheter. En slik database er Adressebok, som inkluderer personer og deres kontaktinformasjon. IOS-enheter tilbyr også en kontakter-app som lar brukerne administrere denne databasen ved å legge til nye kontakter, oppdatere dem, slette dem og så videre.
Informasjonen i en adressebok er tilgjengelig for andre apper, om enn på en kontrollert måte. For eksempel kan appen presentere brukere med kontaktene fra adresseboken, la dem velge en kontakt, og deretter bruke informasjonen til den valgte kontakten. Jeg bruker noen ganger denne funksjonaliteten i Tic-Tac-Toe til å glede over min strålende Tic-Tac-Toe-poengsum via en e-post til noen i kontaktlisten min.
For å få bedre forståelse, ta en titt på skjermkontrollen for Game Session (TTTGameSessionViewController.m og.h) og følg med. Først bruker du visningskontrolleren til å implementere ABPeoplePickerNavigationControllerDelegate-protokollen som vist her:
@interface TTTGameSessionViewController: UIViewController {…}
Metoden sendScoresByEmailWithContact (gjengitt neste) er handlingsmetoden som starter prosessen ved å presentere adressen Bokvelger og lar brukeren velge kontakt:
- (IBAction) sendScoresByEmailWithContact: (id) avsender {ABPeoplePickerNavigationController * picker = [[c alloker] init]; velgeren. peoplePickerDelegate = selv; [self presentViewController: picker animated: JA ferdigstillelse: null];}
Denne metoden setter også sitt objekt (Game Session View Controller) som delegat for plukkeren. Når plukkeren fullfører valg av en oppføring fra adresseboken, skal delegatemetoden shouldContinueAfterSelectingPerson kalles:
- (BOOL) peoplePickerNavigationController: (ABPeoplePickerNavigationController *) peoplePicker shouldContinueAfterSelectingPerson: (ABRecordRef) selectedPerson {NSString * oneEmail = nil; ABMultiValueRef e-post = ABRecordCopyValue (valgtPerson, kABPersonEmailProperty); hvis (ABMultiValueGetCount (e-post)> 0) {oneEmail = (__bridge_transfer NSString *) ABMultiValueCopyValueAtIndex (e-post, 0);} CFRelease (e-post); [self dismissViewControllerAnimated: JA ferdigstillelse: ^ {[self sendScoresByEmailWithAddress: oneEmail];}]; returner NEI;}
E-postadressen til kontakten valgt ved hjelp av plukkeren hentes fra variabelen valgtPerson ved hjelp av egenskapen kABPersonEmailProperty. Merk også at kontakten kan ha flere e-postmeldinger, og bare den første (ved indeks 0 i den utviste listen) blir brukt.
Derefter avvises pekefeltkontrollen ved hjelp av dismissViewControllerAnimated. Her kommer den kule delen: Ved å sette ferdigstillingsparameteren til metoden sendScoresByEmailWithAddress, får denne metoden til å ringes rett etter at adressebokvælgeren er avvist. Denne prosessen fører igjen til at e-postprogrammet brann opp, med adressen er fylt ut, klar for at du sender dine poeng.
Til slutt, se på de to metodene bridge_transfer og CFRelease. De er nødvendige fordi API-adresseboken ikke er integrert med den nye automatiske referansetellingen (ARC) -minnehåndteringsmekanismen.