swift2 快速获取“我的名片”CNContact

6jjcrrmo  于 2022-11-06  发布在  Swift
关注(0)|答案(2)|浏览(159)

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

9vw9lbht

9vw9lbht1#

它不是来自(MacOS 10.11的全新版本)CNContact,而是MacOS的ABAddressBook框架有一个名为me()的方法,该方法将返回登录用户的ABPerson记录。
要获得等效的vCard,请在ABPerson对象上调用vCardRepresentation()
上述解决方案的好处是它可以在旧的MacOS版本(eidogg. MacOS 10. 9,10. 10)上工作。
Marek指出了CNContactStore中的unifiedMeContactWithKeysToFetch: API,但在我键入此答案时,它只记录在SDK的.h头文件中,而没有记录在the CNContactStore documentation中。

ccrfmcuu

ccrfmcuu2#

有一个CNContact API可以实现这一点,但它只在macOS 10.11+中可用,而在迄今为止的任何版本的iOS中都不可用。
(For在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]

相关问题