【问题标题】:ABAddressBook ABSourceNameABAddressBook ABSourceName
【发布时间】:2012-05-08 08:06:47
【问题描述】:

如何获取ABAddressBook 源的名称来显示它? (我知道枚举kABSourceTypeLocalkABSourceTypeExchange,...)

我不是指您使用 ABRecordCopyValue(source,ABSourceNameProperty) 获得的源类型名称,而是在 Apple 的 Contacts-App 中以表格形式显示的真实名称部分,例如: “Exchange Google”或“iCloud”

【问题讨论】:

  • 我这边也有同样的问题。你能找回名字吗?
  • 成功了吗?这里也有同样的问题。

标签: objective-c ios abaddressbook


【解决方案1】:

如果您查看ABSource Reference,您可以看到他们有一个名为kABSourceNameProperty 的属性,其中包含“源名称”。以下是获取所有源名称的方法:

NSMutableArray *sourceNames = [[NSMutableArray alloc] init];
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef sourcesArray = ABAddressBookCopyArrayOfAllSources(addressBook);

for (CFIndex i = 0; i < CFArrayGetCount(sourcesArray); i++) {
    ABRecordRef source = (ABRecordRef)CFArrayGetValueAtIndex(sourcesArray, i);
    CFStringRef sourceName = (CFStringRef)ABRecordCopyValue(ABRecordGetRecordID(source, kABSourceNameProperty);

    if(sourceName){
        [sourceNames addObject: (__bridge_transfer NSString *)sourceName];
    }
}

CFRelease(sourcesArray);
CFRelease(addressBook);

希望这会有所帮助!

【讨论】:

  • 这不会给出与 Apple 的联系人 UI 相同的源名称。对我来说,Apple 的节目“Exchange”、“Facebook”和“iCloud”。上面的答案给出了“联系人”(CNContainerTypeExchange)、“卡”(CNContainerTypeCardDAV)和“”(CNContainerTypeCardDAV)
  • @MattToohey - 这个答案是三年前发布的。我不了解 Apple 对其地址簿 API 的最新更改,因此如果您现在运行它,这很可能会被破坏/产生意外结果。
猜你喜欢
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多