2010-03-08 40 views
8

我的問題是圍繞iPhone上聯繫人列表的人員條目中的一些默認電話號碼標籤的標記。什麼是圍繞默認iPhone通訊錄人電話號碼標籤的標籤?

我已經創建了一個人, 「約翰·史密斯」 與下面的電話號碼條目的iPhone聯繫人列表中的地址簿條目:

  • 中移動(604)123-4567
  • iPhone(778)123 -4567
  • 首頁(604)789-4561
  • 工作(604)456-7891
  • 主(604)789-1234
  • 擴音器(234)567-8990

請注意,前五個標籤是Contacts應用程序提供的默認標籤,最後一個標籤「megaphone」是自定義標籤。

我寫了下面的方法來檢索和每個人在地址簿中顯示的標籤和電話號碼:

-(void)displayPhoneNumbersForAddressBook { 
    ABAddressBookRef book = ABAddressBookCreate(); 
    CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(book); 
    ABRecordRef record = CFArrayGetValueAtIndex(people, 0); 
    ABMultiValueRef multi = ABRecordCopyValue(record, kABPersonPhoneProperty); 
    NSLog(@"---------"); 
    NSLog(@"displayPhoneNumbersForAddressBook"); 

    CFStringRef label, phone; 
    for (CFIndex i = 0; i < ABMultiValueGetCount(multi); ++i) { 
      label = ABMultiValueCopyLabelAtIndex(multi, i); 
      phone = ABMultiValueCopyValueAtIndex(multi, i); 
      NSLog(@"label: \"%@\"  number: \"%@\"", (NSString*)label, (NSString*)phone); 
      CFRelease(label); 
      CFRelease(phone); 
    } 
    NSLog(@"---------"); 
    CFRelease(multi); 
    CFRelease(people); 
    CFRelease(book); 
} 

,這裏是爲我輸入的地址簿輸入輸出:

2010-03-08 13:24:28.789 test2m[2479:207] --------- 
2010-03-08 13:24:28.789 test2m[2479:207] displayPhoneNumbersForAddressBook 
2010-03-08 13:24:28.790 test2m[2479:207] label: "_$!<Mobile>!$_"  number: "(604) 123-4567" 
2010-03-08 13:24:28.790 test2m[2479:207] label: "iPhone"  number: "(778) 123-4567" 
2010-03-08 13:24:28.791 test2m[2479:207] label: "_$!<Home>!$_"  number: "(604) 789-4561" 
2010-03-08 13:24:28.791 test2m[2479:207] label: "_$!<Work>!$_"  number: "(604) 456-7891" 
2010-03-08 13:24:28.792 test2m[2479:207] label: "_$!<Main>!$_"  number: "(604) 789-1234" 
2010-03-08 13:24:28.792 test2m[2479:207] label: "megaphone"  number: "(234) 567-8990" 
2010-03-08 13:24:28.793 test2m[2479:207] --------- 

什麼標記字符

_$!<and>!$_ 

周圍大多數,SA iPhone的默認標籤爲?

你能指點我在「iPhone OS上的地址簿編程指南」中可以找到的信息嗎?

謝謝你的幫助。

+4

您可以使用ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(multi,i))來消除這些標記字符。 – digdog 2010-03-14 01:27:06

+0

謝謝,Digdog,我不知道。 – rnistuk 2010-03-14 20:29:05

回答

7

我遇到了同樣的問題。這是我認爲迄今爲止。

您看到的標記向系統指示這是默認標籤而不是自定義標籤。如果你運行這段代碼:
NSLog(kABOtherLabel);

你會GE這樣的結果:
_$!<Other>!$_

所以這是存儲在kABOtherLabel常數(類型CFStringRef的)的值。我認爲iPhone之所以沒有標記,是因爲它是'自定義'標籤,但它是由Apple而不是用戶發起的。

您可以給標籤賦予您喜歡的任何值,如上面的megaphone標籤所證明。但請注意,如果您嘗試使用「其他」標籤創建電話號碼(或電子郵件地址)而不使用kABOtherLabel常數或其值爲_$!<Other>!$_,系統會認爲您正在創建自定義標籤。就像這個例子:

ABMultiValueAddValueAndLabel(email, @"[email protected]", @"other", NULL);

如果你去和編輯iPhone上的那個地址簿條目,將在自定義標籤的一個單獨的列表中顯示出來。 (所以會有'其他'的兩個選擇,一個在默認值和一個在自定義標籤中)

雖然這還沒有回答你的問題,我希望它有幫助。

+0

對不起,我以前曾經評論過這個,可能我忘了點擊按鈕。 感謝您的解釋,我認爲這是一個巨大的衝擊,並證實了我的想法。 – rnistuk 2010-03-23 16:46:48

1

這在新的CNContact framework中大致相同,它取代了ABAddressBook作爲處理聯繫人的推薦方式。

有六個默認標籤,蘋果公司提供,這是與phone-specific CNLabelledValue constants引用:

CNLabelPhoneNumberiPhone = "iPhone" 
CNLabelPhoneNumberMobile = "_$!<Mobile>!$_" 
CNLabelPhoneNumberMain = "_$!<Main>!$_" 
CNLabelPhoneNumberHomeFax = "_$!<HomeFAX>!$_" 
CNLabelPhoneNumberOtherFax = "_$!<OtherFAX>!$_" 
CNLabelPhoneNumberPager = "_$!<Pager>!$_" 

_$!<>!$_圍繞這些參賽者五個列入最有可能是一個標誌,該字符串可以通過本地化操作系統,給定方法localizedString(forLabel:)的可用性。我相信這些分隔符不會出現在iPhone周圍的原因是因爲Apple沒有本地化iPhone,iPhone在所有語言中均顯示爲「iPhone」。

明智的行爲將隱藏這些顯示的字符串,發生使用localizedString(forLabel:)時,繼續當編輯的條目,這些分隔符來存儲與字符串,任何用戶創建的標籤映射到這些字符串在自定義標籤是等同於這些的主體,即Mobile,Main,Pager等等。