6

このスレッドに示されているように、ユーザーのメールアドレスを取得したい: Getting user's default email address in Cocoa

しかし、私が試したとき:

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 をインポートしました。

どうしたの ?

4

1 に答える 1

7

これらはコードの修正です

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];

私はキー値コーディングにあまり詳しくないので、それに関連する方法についてはわかりません。

これは私がそれを行う方法です

ABMultiValueRef電子メールには、自宅、職場、その他の電子メールの 3 つの電子メール アドレスが保存されます。次のコードを試して、自宅の電子メールを取得してください。

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 にあります。

于 2012-06-27T16:20:02.097 に答える