2014-02-15 15 views
1

我正試圖在地址簿中找到聯繫人的家庭電話號碼。通過閱讀他們,我不能告訴這是 -如何在iOS上的通訊錄中獲取某人的家庭電話號碼?

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

首先,這些常量的命名是奇怪的:要做到這一點,我的電話號碼的標籤,所有的possible labels比較非傳真家庭電話標籤。那麼,我只需要測試它們,然後使用排除過程。

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 = [email protected] 

凱特貝爾沒有問題。我可以檢測到她的手機是移動的。但是,安娜·哈羅有個問題。由於沒有任何標籤匹配,我無法弄清楚她有什麼類型的電話號碼。

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 = [email protected] 

我不希望從字面上匹配字符串_%!<Home>!$_因爲精確值可能與iOS的未來版本中改變。

回答

2

您需要通用標籤kABHomeLabel。這是用於電話號碼,電子郵件和地址的「家庭」標籤。

相關問題