快速抢“我的卡”CNContact

问题描述 投票:0回答:3

我似乎不知道如何从联系人中获取用户的“我的卡”。我正在使用 swift 开发本机 Mac 应用程序。

macos swift swift2 cncontact
3个回答
0
投票

它不是来自(MacOS 10.11 中的全新)CNContact,但 MacOS 的 ABAddressBook 框架有一个名为

me()
的方法,它将返回登录用户的 ABPerson 记录。

要获得等效的 vCard,请在 ABPerson 对象上调用

vCardRepresentation()

上述解决方案的好处是它可以在较旧的 MacOS 版本上运行(例如 MacOS 10.9、10.10)。

Marek 指出 CNContactStore 中的

unifiedMeContactWithKeysToFetch:

 API,但在我输入此答案时,它仅记录在 SDK 中的 .h 头文件中,而不记录在 
CNContactStore 文档中。


0
投票
为此有一个 CNContact api,但它仅在 macOS 10.11+ 中可用,在迄今为止的任何版本的 iOS 中均不可用。

(对于 iOS,恢复到 ABAddressBook 并不能解决问题,因为

me()

 方法同样仅适用于 MacOS,尽管可以追溯到 macOS 10.2+。) 

import Contacts let nameKeys = [ CNContactNamePrefixKey, CNContactGivenNameKey, CNContactMiddleNameKey, CNContactFamilyNameKey, CNContactNameSuffixKey, ] as [CNKeyDescriptor] do { let contactStore = CNContactStore() let me = try contactStore.unifiedMeContactWithKeys(toFetch: nameKeys) } catch let error { print("Failed to retreive Me contact: \(error)") }

当然也可以获取额外的密钥:

let allContactKeys = [ CNContactNamePrefixKey, CNContactGivenNameKey, CNContactMiddleNameKey, CNContactFamilyNameKey, CNContactNameSuffixKey, CNContactOrganizationNameKey, CNContactDepartmentNameKey, CNContactJobTitleKey, CNContactBirthdayKey, CNContactNicknameKey, CNContactNoteKey, CNContactNonGregorianBirthdayKey, CNContactPreviousFamilyNameKey, CNContactPhoneticGivenNameKey, CNContactPhoneticMiddleNameKey, CNContactPhoneticFamilyNameKey, CNContactImageDataKey, CNContactThumbnailImageDataKey, CNContactImageDataAvailableKey, CNContactTypeKey, CNContactPhoneNumbersKey, CNContactEmailAddressesKey, CNContactPostalAddressesKey, CNContactDatesKey, CNContactUrlAddressesKey, CNContactRelationsKey, CNContactSocialProfilesKey, CNContactInstantMessageAddressesKey, ] as [CNKeyDescriptor]
    

0
投票
如果有人仍在寻找,现在可以通过

CNContactStore

使用
这个统一的MeContactWithKeys(toFetch:)方法实现这一点。所有苹果平台均支持。

© www.soinside.com 2019 - 2024. All rights reserved.