我需要选择我的应用创建联系人的地址簿来源。
在“通讯录”应用中,当我选择“< Groups”时,我会看到选项
使用函数ABAddressBookCopyArrayOfAllSources
我获得了
这些名称绝不具有描述性,我想在源名称或类型之外显示帐户名称,就像联系人应用程序一样。
您是否知道如何找到来源的帐户名称,或检索所有现有帐户名称和每个帐户的来源?是否有其他想法可以获得更具描述性的条目?
答案 0 :(得分:4)
从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);
我所能提出的建议是提交一份雷达,要求ABRecordCopyCompositeName()
做出任何联系本身可用于我们其他人的服务。
答案 1 :(得分:0)
这可能有所帮助:
Obtaining Specific ABSource from ABAddressBook in iOS 4+
iOS 4+提供了新的API,允许用户从ABSource
中选择特定的ABAddressBook
。这可以用作一些操作,例如,某些来源(即Exchange)不支持创建ABGroup
。
“并非所有的源类型都支持组,更明显的是,Exchange对组没有任何了解。” - http://flavors.me/volonbolon#1a5/tumblr
它显示了如何利用函数来利用新API来获取特定类型的来源,这些来源可能会用于调用ABGroupCreateInSource()
,这看起来就像你所追求的那样。