1

連絡先がリンクされている連絡先があります。したがって、この連絡先を ABPersonViewController で表示すると、元のメールとリンクされた連絡先からのメールがあります。 ここに画像の説明を入力

リンクされた電子メール (John-appleseed@mac.com) を選択すると、メソッド呼び出しが委任されます。

- (BOOL)personViewController:(ABPersonViewController *)personViewController shouldPerformDefaultActionForPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
{
    //get selected phone number
    ABMultiValueRef multi = ABRecordCopyValue(person, property);
    CFIndex index = ABMultiValueGetIndexForIdentifier(multi, identifier);
    NSString *selectedContactData = (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(multi, index);

    return NO;
}

しかし、 selectedContactData では、選択された電子メールではなく、最初の電子メールを受け取ります。この問題は、連絡先を組み合わせた場合にのみ発生します。

連絡先が接続されている連絡先からメールを選択する適切な方法はありますか?

4

1 に答える 1

1

あなたが説明した動作を想像できる唯一の方法ABRecordRefdisplayedPersonABPersonViewController. 明らかに、このコード スニペットではperson、このデリゲート メソッドに渡されたプロパティを正しく使用していますが、コード スニペットを私たちと共有するときに単純化したのではないでしょうか? コード スニペットをshouldShowLinkedPeopleオンにして使用すると、リンクされた連絡先のプロパティで問題なく動作します。

間違ったABRecordRef変数を使用しても問題がないと確信している場合、他に想像できる唯一の可能性は、シミュレーターで提供されている既定の連絡先を使用して奇妙な動作を経験したことです。実際に連絡先がリンクされている実際のデバイスでこれを試すことをお勧めします。

于 2015-03-24T18:34:42.383 に答える