rni*_*tuk 8 iphone macos abaddressbook
我的问题涉及围绕iPhone上联系人列表的Person条目中的某些默认电话号码标签的标记.
我为一个人创建了一个iPhone联系人列表通讯录条目,"John Smith",其中包含以下电话号码条目:
请注意,前五个标签是"联系人"应用程序提供的默认标签,最后一个标签"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地址簿编程指南"中找到的信息吗?
谢谢您的帮助.
我遇到了同样的问题.这是我到目前为止所想的.
您看到的标记向系统显示这是默认标签而不是自定义标签.如果您运行此代码:
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个选项,一个在默认值中,一个在自定义标签中)
虽然这没有回答你的问题,但我希望它有所帮助.
这与新的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:)如果编辑条目,则继续将这些分隔符与字符串一起存储,并将任何用户创建的标签映射到这些字符串,其中自定义标签等于主体其中,即移动、主要、寻呼机等。
| 归档时间: |
|
| 查看次数: |
3141 次 |
| 最近记录: |