我试图在地址簿中查找联系人的家庭电话号码。为此,我将电话号码的标签与所有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可能会改变确切的值。
答案 0 :(得分:2)
您需要通用标签kABHomeLabel
。这是用于电话号码,电子邮件和地址的“主页”标签。