iOS: не удается получить адрес электронной почты пользователя

Я хочу получить адрес электронной почты пользователя, как показано в этой теме: Получение адреса электронной почты пользователя по умолчанию в Какао

Но когда я попробовал:

NSString *theEmailAddressWeWantToObtain = @"";
ABPerson *aPerson = [[ABAddressBook sharedAddressBook] me];
ABMultiValue *emails = [aPerson valueForProperty:kABEmailProperty];
if([emails count] > 0)
        theEmailAddressWeWantToObtain = [emails valueAtIndex:0];

У меня есть эти ошибки:

  • Использование необъявленного идентификатора "aPerson"
  • Использование необъявленного идентификатора 'ABAddressBook'
  • Неизвестный тип 'ABMultiValue'

Я связал AddressBook и AddressBookUI и импортировал AddressBook/AddressBook.h

В чем дело?

1 ответ

Решение

Это исправления к вашему коду

NSString *theEmailAddressWeWantToObtain = @"";
ABPerson *aPerson = [[ABAddressBook sharedAddressBook] me];
ABMultiValueRef *emails = [aPerson valueForProperty:kABEmailProperty]; //No such thing as ABMultiValue; it's ABMultiValueRef
if(ABMultiValueGetCount(emails) > 0) //"emails" is not an array, so you can't use the "count" method
    theEmailAddressWeWantToObtain = [emails valueAtIndex:0];

Я не очень знаком с Key Value Coding, поэтому я не уверен насчет ваших методов, связанных с этим.

Это способ, которым я бы сделал это

В письме хранятся три адреса электронной почты ABMultiValueRef: дома, на работе и другие электронные письма. Попробуйте этот код, чтобы получить домашнюю электронную почту:

NSString *email;

ABRecordRef currentPerson = (__bridge ABRecordRef)[[PSAddressBook arrayOfContacts] objectAtIndex:identifier];
ABMultiValueRef emailsMultiValueRef = ABRecordCopyValue(currentPerson, kABPersonEmailProperty);

NSUInteger emailsCount;    
//Goes through the emails to check which one is the home email
for(emailsCount = 0; emailsCount <= ABMultiValueGetCount(emailsMultiValueRef);emailsCount++){ 
    NSString *emailLabel = (__bridge_transfer NSString *)ABMultiValueCopyLabelAtIndex (emailsMultiValueRef, emailsCount);

    if([emailLabel isEqualToString:@"Home"]){

        if ((__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(emailsMultiValueRef, emailsCount) != NULL){

            email = (__bridge_transfer NSString *)ABRecordCopyValue(currentPerson, kABPersonEmailProperty);
        }   

        //If the last name property does not exist
        else{

            email = @"NULL";
        }
    }
}

CFRelease(emailsMultiValueRef);

Если у вас есть какие-либо вопросы по поводу кода, просто спросите в комментариях. Надеюсь это поможет!

РЕДАКТИРОВАТЬ:

PSAddressBook класс, упомянутый в коде, можно найти здесь: https://github.com/pasawaya/PSAddressBook

Другие вопросы по тегам