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

rni*_*tuk 8 iphone macos abaddressbook

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

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

  • 移动(604)123-4567
  • iPhone(778)123-4567
  • 家(604)789-4561
  • 工作(604)456-7891
  • Main(604)789-1234
  • 扩音器(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);
}
Run Code Online (Sandbox Code Playgroud)

这是我输入的地址簿条目的输出:

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] ---------
Run Code Online (Sandbox Code Playgroud)

什么是标记字符

_$!< and >!$_
Run Code Online (Sandbox Code Playgroud)

除了iPhone之外,最常用的是默认标签吗?

你能指点我在"iPhone OS地址簿编程指南"中找到的信息吗?

谢谢您的帮助.

And*_*rew 7

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

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

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

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

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

ABMultiValueAddValueAndLabel(email, @"nospam@notarealdomain.com", @"other", NULL);
Run Code Online (Sandbox Code Playgroud)

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

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


Dun*_*age 5

这与新的CNContact 框架基本相同,该框架取代了 ABAddressBook 作为处理联系人的推荐方式。

Apple 提供了六个默认标签,这些标签通过特定于手机的 CNLabelledValue 常量进行引用:

CNLabelPhoneNumberiPhone = "iPhone"
CNLabelPhoneNumberMobile = "_$!<Mobile>!$_"
CNLabelPhoneNumberMain = "_$!<Main>!$_"
CNLabelPhoneNumberHomeFax = "_$!<HomeFAX>!$_"
CNLabelPhoneNumberOtherFax = "_$!<OtherFAX>!$_"
CNLabelPhoneNumberPager = "_$!<Pager>!$_"
Run Code Online (Sandbox Code Playgroud)

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

明智的行为是在显示字符串时隐藏这些分隔符(使用 发生这种情况),localizedString(forLabel:)如果编辑条目,则继续将这些分隔符与字符串一起存储,并将任何用户创建的标签映射到这些字符串,其中自定义标签等于主体其中,即移动、主要、寻呼机等。