如何在iOS上的地址簿中获取某人的家庭电话号码?

时间:2014-02-15 02:51:08

标签: ios iphone cocoa-touch addressbook abaddressbook

我试图在地址簿中查找联系人的家庭电话号码。为此,我将电话号码的标签与所有possible labels进行比较:

const ABPropertyID kABPersonPhoneProperty;
const CFStringRef kABPersonPhoneMobileLabel;
const CFStringRef kABPersonPhoneIPhoneLabel;
const CFStringRef kABPersonPhoneMainLabel;
const CFStringRef kABPersonPhoneHomeFAXLabel;
const CFStringRef kABPersonPhoneWorkFAXLabel;
const CFStringRef kABPersonPhoneOtherFAXLabel;
const CFStringRef kABPersonPhonePagerLabel;

首先,这些常量的命名很奇怪 - 仅仅通过阅读它们,我无法分辨哪个是非传真的家庭电话标签。那么,我只需要测试所有这些并使用消除过程。

NSString* phoneNumber = nil;

// record is an ABRecordRef
ABMultiValueRef phoneNumbers = ABRecordCopyValue(
    record,
    kABPersonPhoneProperty
);

if (ABMultiValueGetCount(phoneNumbers) > 0) {
    CFStringRef phoneLabelRef = ABMultiValueCopyLabelAtIndex(phoneNumbers, 0);
    NSString* phoneLabel = (__bridge_transfer NSString*)phoneLabelRef;

    NSLog(@"phone label: %@", phoneLabel);
    NSLog(@"phone is mobile: %d",  CFStringCompare(phoneLabelRef, kABPersonPhoneMobileLabel, 0) == kCFCompareEqualTo);
    NSLog(@"phone is main: %d",  CFStringCompare(phoneLabelRef, kABPersonPhoneMainLabel, 0) == kCFCompareEqualTo);
    NSLog(@"phone is iPhone: %d",  CFStringCompare(phoneLabelRef, kABPersonPhoneIPhoneLabel, 0) == kCFCompareEqualTo);
    NSLog(@"phone is home fax: %d",  CFStringCompare(phoneLabelRef, kABPersonPhoneHomeFAXLabel, 0) == kCFCompareEqualTo);
    NSLog(@"phone is work fax: %d",  CFStringCompare(phoneLabelRef, kABPersonPhoneWorkFAXLabel, 0) == kCFCompareEqualTo);
    NSLog(@"phone is other fax: %d",  CFStringCompare(phoneLabelRef, kABPersonPhoneOtherFAXLabel, 0) == kCFCompareEqualTo);
    NSLog(@"phone is pager: %d",  CFStringCompare(phoneLabelRef, kABPersonPhonePagerLabel, 0) == kCFCompareEqualTo);
}

以下是Simulator中两个预加载联系人的打印输出。别担心,所有的联系信息都是假的。

phone label: _$!<Mobile>!$_
phone is mobile: 1
phone is main: 0
phone is iPhone: 0
phone is home fax: 0
phone is work fax: 0
phone is other fax: 0
phone is pager: 0
FIRST = Kate, LAST = Bell, PHONE = (555) 564-8583, EMAIL = kate-bell@mac.com

Kate Bell没问题。我可以发现她的手机是移动的。然而,Anna Haro存在问题。由于没有任何标签匹配,我无法弄清楚她有哪种类型的电话号码。

phone label: _$!<Home>!$_
phone is mobile: 0
phone is main: 0
phone is iPhone: 0
phone is home fax: 0
phone is work fax: 0
phone is other fax: 0
phone is pager: 0
FIRST = Anna, LAST = Haro, PHONE = 555-522-8243, EMAIL = anna-haro@mac.com

我不希望字面上匹配字符串_%!<Home>!$_,因为未来版本的iOS可能会改变确切的值。

1 个答案:

答案 0 :(得分:2)

您需要通用标签kABHomeLabel。这是用于电话号码,电子邮件和地址的“主页”标签。