2

アプリの設定ページの開発を開始しました。

このページで、ユーザーは「+」ボタンをタップして。を開くことができますABPeoplePickerNavigationController。連絡先をタップすると、設定ページのテキストフィールドに、選択したユーザーからの正しいデータが適切に入力されます。

誰かの仕事用メールを取得したい場合は、次のことを理解しています。

NSString *workEmail = (__bridge NSString *)ABMultiValueCopyValueAtIndex(emails, 1);

家の場合は次のようになります。

NSString *homeEmail = (__bridge NSString *)ABMultiValueCopyValueAtIndex(emails, 0);

しかし、さまざまな種類の電話番号を取得する限り、私は行き詰まっています。

誰かが私が2つの電子メールを受け取る方法とうまくいけば同じような異なるタイプの電話番号を取得する方法を教えてくれれば幸いです。

4

1 に答える 1

7

さて、最初に、あなたは間違っていることを理解しています-ユーザーの自宅のメールアドレスが#0であるという保証はありません。そのユーザーの仕事用メールしかない場合はどうなりますか?次に、それはスロット0になります。

必要なのはABMultiValueCopyLabelAtIndex()、です。これを名前付き定数と一緒に使用すると、どれがどれであるかがわかります。

ABPersonRef person = ...;
ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
if (phoneNumbers) {
    CFIndex numberOfPhoneNumbers = ABMultiValueGetCount(phoneNumbers);
    for (CFIndex i = 0; i < numberOfPhoneNumbers; i++) {
        CFStringRef label = ABMultiValueCopyLabelAtIndex(phoneNumbers, i);
        if (label) {
            if (CFEqual(label, kABWorkLabel)) {
                /* it's the user's work phone */
            } else if (CFEqual(label, kABHomeLabel)) {
                /* it's the user's home phone */
            } else if (...) {
                /* other specific cases of your choosing... */
            } else {
                /* it's some other label, such as a custom label */
            }
            CFRelease(label);
        }
    }
    CFRelease(phoneNumbers);
}
于 2012-12-27T00:17:04.550 に答える