Vídeo: Como desbloquear sites bloqueados (iOS) 2025
A estrutura do iOS fornece funções que permitem que seu aplicativo funcione com os bancos de dados que vem com dispositivos iOS. Um desses bancos de dados é o Catálogo de endereços, que inclui pessoas e suas informações de contato. Os dispositivos iOS também fornecem um aplicativo de Contatos que permite aos usuários gerenciar este banco de dados, adicionando novos contatos, atualizando-os, excluindo-os, e assim por diante.
A informação em um Catálogo de Endereços é acessível a outros aplicativos, embora de forma controlada. Por exemplo, seu aplicativo pode apresentar usuários com os contatos do Catálogo de endereços, permitir que eles selecionem um contato e, em seguida, use as informações do contato selecionado. Às vezes eu uso essa funcionalidade no Tic-Tac-Toe para me divertir com minha gloriosa pontuação do Tic-Tac-Toe através de um e-mail para alguém na minha lista de contatos.
Para entender melhor, dê uma olhada no controlador de visualização Session Session (TTTGameSessionViewController. M e. H) e acompanhe. Primeiro, você usa o controlador de visualização para implementar o protocolo ABPeoplePickerNavigationControllerDelegate, como mostrado aqui:
@interface TTTGameSessionViewController: UIViewController {…}
O método sendScoresByEmailWithContact (reproduzido em seguida) é o método de ação que inicia o processo apresentando o Endereço Seletor de livros e permitindo ao usuário selecionar o contato:
- (IBAction) sendScoresByEmailWithContact: (id) sender {ABPeoplePickerNavigationController * selecter = [[c alloc] init]; selecionador. peoplePickerDelegate = self; [self presentViewController: picker animated: YES completion: nil];}
Este método também define seu objeto (o controlador de exibição Session do jogo) como o delegado para o seletor. Quando o seletor terminar de selecionar uma entrada no Catálogo de endereços, o método delegado deveContinueAfterSelectingPerson é chamado de:
- (BOOL) peoplePickerNavigationController: (ABPeoplePickerNavigationController *) peoplePicker shouldContinueAfterSelectingPerson: (ABRecordRef) selectedPerson {NSString * oneEmail = nil; E-mails ABMultiValueRef = ABRecordCopyValue (selectedPerson, kABPersonEmailProperty); se (ABMultiValueGetCount (emails)> 0) {oneEmail = (__bridge_transfer NSString *) ABMultiValueCopyValueAtIndex (e-mails, 0);} CFRelease (e-mails); [self dismissViewControllerAnimated: YES conclusão: ^ {[self sendScoresByEmailWithAddress: oneEmail];}]; return NO;}
O endereço de e-mail do contato selecionado usando o seletor é extraído da variável selectedPerson usando a propriedade kABPersonEmailProperty. Observe também que o contato pode ter vários e-mails, e apenas o primeiro (no índice 0 na lista extraída) é usado.
Em seguida, o controlador de visualização Picker é descartado usando dismissViewControllerAnimated. Aqui vem a parte legal: Configurar o parâmetro de conclusão para o método sendScoresByEmailWithAddress faz com que este método seja chamado logo após o seletor do Catálogo de Endereços ser demitido. Este processo, por sua vez, faz com que o aplicativo de email seja ativado, com o endereço preenchido, tudo pronto para você enviar suas pontuações.
Finalmente, olhe para os dois métodos bridge_transfer e CFRelease. Eles são necessários porque a API do Catálogo de endereços não está integrada com o novo mecanismo de gerenciamento de memória de contagem de referência automatizada (ARC).