iPhone通讯簿:列出来源和帐户
我需要选择我的应用程序在其中创建联系人的通讯簿源 在Contacts应用程序中,当我选择“iPhone通讯簿:列出来源和帐户,iphone,addressbook,Iphone,Addressbook,我需要选择我的应用程序在其中创建联系人的通讯簿源 在Contacts应用程序中,当我选择“
- 所有联系人
- 移动式
- 全手机
- 公司
- 家族
- 朋友
- 顶点交换
- ACME Exchange全局地址列表
- 测试卡
- 通讯录
- 搜寻
- 没有名字;类型:kABSourceTypeMobileMe
- 没有名字;类型:kABSourceTypeExchangeGAL
- “通讯录”;类型:kABSourceTypeCardDAV
- “搜索”;类型:kABSourceTypeCardDAVSearch
ABAddressBook
中选择特定的ABSource
。这可能很有用,因为某些源(如Exchange)不支持某些操作,例如创建ABGroup
“并非所有源类型都支持组,更明显的是,Exchange对组一无所知。”
它展示了如何使用函数来利用新的API来获取特定类型的源,这些源可能用于调用
ABGroupCreateInSource()
,这看起来就是您想要的。从iOS 5.1开始,没有用于此的公共API
人们希望ABRecordCopyCompositeName()
能够得到您想要的东西-它为个人和组记录提供了“人性化”的名称-但遗憾的是,它返回null
正如格雷厄姆指出的(在提供赏金时),直接要求kABSourceNameProperty
提供了错误的答案
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef sources = ABAddressBookCopyArrayOfAllSources(addressBook);
CFIndex i, c = CFArrayGetCount(sources);
ABRecordRef curSource;
// Log each source name.
for (i=0; i<c; i++) {
curSource = CFArrayGetValueAtIndex(sources, i);
NSString *name = (__bridge_transfer NSString *)ABRecordCopyCompositeName(curSource);
NSLog(@"Alas this is null: %@", name);
NSString *directValue = (__bridge_transfer NSString *)ABRecordCopyValue(curSource,kABSourceNameProperty);
NSLog(@"And direct access gives wrong answer: %@", directValue);
}
CFRelease(sources);
CFRelease(addressBook);
ABAddressBookRef addressBook=ABAddressBookCreate();
CFArrayRef sources=abAddressBookCopyArrayFallSources(addressBook);
CFIndex i,c=CFArrayGetCount(来源);
ABRecordRef curSource;
//记录每个源名称。
对于(i=0;iDid您知道如何列出帐户名吗?例如,在您的示例中:ACME Exchange或Test CardDav谢谢,不幸的是,ABRecordCopyCompositeName()
的文档包括“此函数的行为没有为源记录定义”。因此我不希望它工作:-(