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>
Foi útil?

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]);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top