7

我似乎无法弄清楚如何从联系人中获取用户“我的卡”。我正在使用 swift 开发本机 Mac 应用程序。

4

2 回答 2

0

它不是来自(MacOS 10.11 的全新版本)CNContact,而是 MacOS 的ABAddressBook 框架有一个调用方法me(),该方法将返回登录用户的 ABPerson 记录。

要获得等效的 vCard,请调用vCardRepresentation()该 ABPerson 对象

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

Marek 指出了unifiedMeContactWithKeysToFetch:CNContactStore 中的 API,但在我输入这个答案时,它只记录在 SDK 的 .h 头文件中,而不是CNContactStore 文档中。

于 2015-10-23T03:23:14.413 回答
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]
于 2017-08-05T00:33:38.223 回答