默认iPhone地址簿人物电话号码标签周围有哪些标签?

时间:2010-03-08 21:41:38

标签: iphone macos abaddressbook

我的问题涉及围绕iPhone上联系人列表的人员条目中的某些默认电话号码标签的标记。

我为一个人创建了一个iPhone联系人列表通讯录条目,“John Smith”,其中包含以下电话号码:

  • 手机(604)123-4567
  • iPhone(778)123-4567
  • Home(604)789-4561
  • 工作(604)456-7891
  • Main(604)789-1234
  • megaphone(234)567-8990

请注意,前五个标签是“联系人”应用程序提供的默认标签,最后一个标签“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 >!$_
除了iPhone之外,

最常用的是?

的默认标签

您能指出我在“iPhone OS地址簿编程指南”中的哪些位置我可以找到这些信息吗?

感谢您的帮助。

2 个答案:

答案 0 :(得分:7)

我遇到了同样的问题。这是我到目前为止的想法。

您看到的标记向系统显示这是默认标签而不是自定义标签。如果您运行此代码:
NSLog(kABOtherLabel);

你会得到这个结果:
_$!<Other>!$_

这是存储在kABOtherLabel常量(CFStringRef类型)中的值。我认为iPhone没有标记的原因是因为它是一个'自定义'标签,但它是由Apple而不是用户发起的。

您可以为标签指定您喜欢的任何值,如上面的megaphone标签所示。但请注意,如果您尝试创建带有“其他”标签的电话号码(或电子邮件地址),而不使用kABOtherLabel常量或其值_$!<Other>!$_,系统会认为您是创建自定义标签。就像在这个例子中一样:

ABMultiValueAddValueAndLabel(email, @"nospam@notarealdomain.com", @"other", NULL);

如果您在iPhone上编辑该地址簿条目,它将显示在单独的自定义标签列表中。 (因此,对于'其他'将有2个选项,一个在默认值中,一个在自定义标签中)

虽然这没有回答你的问题,但我希望它有所帮助。

答案 1 :(得分:2)

这在新的CNContact framework中大致相同,它取代ABAddressBook作为处理联系人的推荐方式。

Apple提供了六个默认标签,引用phone-specific CNLabelledValue constants

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

考虑到方法localizedString(forLabel:)的可用性,围绕其中五个常量包含_$!<>!$_很可能是操作系统可以对字符串进行本地化的标记。我相信这些分隔符不会出现在iPhone周围的原因是因为Apple没有本地化iPhone,因为iPhone显示为iPhone和#34;用所有语言。

明智的行为是在显示使用localizedString(forLabel:)的字符串时隐藏这些字符串,如果编辑条目,则继续使用字符串存储这些分隔符,并将任何用户创建的标签映射到这些字符串。自定义标签等于这些主体,即Mobile,Main,Pager等。