Como recebo e-mails de um contato do livro de endereços do iPhone como NSStrings?
-
10-07-2019 - |
Pergunta
Eu sei que não pode haver vários valores para um e-mail, mas não tenho certeza de como navegar por elas.
posso obter uma pessoa corretamente.
ABRecordRef person = // getting a person;
NSString* emails = (NSString *)ABRecordCopyValue(person, kABPersonEmailProperty);
... o que é o próximo? Se eu tentar imprimir a variável emails
eu recebo:
Emails: <NSCFType: 0x4018d40>
Solução
É porque e-mails não deve ser uma string, mas um array. As pessoas podem ter muitos e-mails!
ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty);
CFStringRef email = ABMultiValueCopyValueAtIndex(emails, <INDEX>);
NSLog( (NSString *) email);
Aqui alguns docs sobre coisas que você pode fazer com MultiValueLists
Outras dicas
O tipo de entrada é um ABMultiValue
(especificamente, o tipo de campo é uma kABMultiStringProperty
). Consulte "Usando listas de vários valores" para saber como ler estes. Veja o Address Book Objective-C Constantes Referência para o que cada propriedade retorna.
Além disso, lembre-se que as funções AB estão sujeitos ao Criar regra . Você é responsável por liberar objetos que você começa a partir de uma função com a palavra "cópia" na mesma.
Em iOS 9 a ABFramework foi preterido para as novas Contatos Framework :
Eu mostrar-lhe um exemplo para registrar cada endereço de e-mail de um CNContact:
CNContact * yourContact = //...
for (CNLabeledValue* emailLabeledValue in yourContact.emailAddresses){
NSLog(@"%@",[emailLabeledValue value]);
}