iPhone地址簿:列出来源和帐户

时间:2010-12-07 12:50:04

标签: iphone addressbook

我需要选择我的应用创建联系人的地址簿来源。

在“通讯录”应用中,当我选择“< Groups”时,我会看到选项

      
  • 所有联系人
  •   
  • 的MobileMe 的     
            
    • 所有MobileMe
    •       
    • 公司
    •       
    • 家庭
    •       
    •       
    • ...
    •     
      
  •   
  • ACME Exchange     
            
    • ACME Exchange全球地址列表
    •     
      
  •   
  • Test CardDAV     
            
    • 通讯录
    •       
    • 搜索
    •     
      

使用函数ABAddressBookCopyArrayOfAllSources我获得了

的源记录
      
  • 没有名字;键入:kABSourceTypeMobileMe
  •   
  • 没有名字;类型:kABSourceTypeExchangeGAL
  •   
  • “地址簿”;类型:kABSourceTypeCardDAV
  •   
  • “搜索”;键入:kABSourceTypeCardDAVSearch

这些名称绝不具有描述性,我想在源名称或类型之外显示帐户名称,就像联系人应用程序一样。

您是否知道如何找到来源的帐户名称,或检索所有现有帐户名称和每个帐户的来源?是否有其他想法可以获得更具描述性的条目?

2 个答案:

答案 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(),这看起来就像你所追求的那样。