gpt4 book ai didi

Swift OSX CNContact.organizationName 在 High Sierra 中崩溃

转载 作者:行者123 更新时间:2023-11-28 15:09:14 27 4
gpt4 key购买 nike

我的 OSX 应用程序允许用户从他们的联系人列表中选择一个联系人并将详细信息加载到客户记录中。我正在使用 CNContactPicker 将联系人检索到 CNContact 记录中。我需要检索的字段之一是 organizationName。这在 High Sierra 之前的操作系统中完美运行,但在升级到 High Sierra 后它会崩溃。可以毫无问题地检索所有其他 CNContact 字段(例如姓名、电子邮件、地址等)。我的 info.plist 文件中确实有请求的权限。

联系人是否有组织名称都没有关系。

代码方面没有太多要展示的:

// This fails on 1st line - any reference to organizationName causes failure
if (contact.organizationName != "") {
self.name = contact.organizationName
}

// This works
if (contact.givenName != "") {
self.name = contact.givenName
}

// This works
if (contact.contactType == CNContactType.organization) {
// Do something
}

实际错误是:[常规] 获取联系人时未请求属性。

我想知道操作系统中发生了什么变化导致了这个错误,如果有解决方案或解决方法请问。

最佳答案

我向 Apple 提交了错误报告并收到了以下解决我的问题的回复。本质上,即使我检索了用户选择的联系人,我也需要执行 CNContactFetchRequest 以使用指定的键(例如组织)再次获取此特定联系人(使用标识符)。

这是他们的确切回应:如果您想确保 organizationName 可用,请为具有相同标识符(从 CNContactPicker 委托(delegate)方法返回)的联系人执行 CNFetchRequest,并提供一组要获取的包含 CNContactOrganizationName 的键。

代码如下:

var validContacts: [CNContact] = []
let contactStore = CNContactStore()
do {
// Specify the key fields that you want to be fetched.
// Note: if you didn't specify your specific field request. your app will crash
let fetchRequest = CNContactFetchRequest(keysToFetch: [CNContactOrganizationNameKey as CNKeyDescriptor])

fetchRequest.predicate = CNContact.predicateForContacts(withIdentifiers: [contact.identifier])

try contactStore.enumerateContacts(with: fetchRequest, usingBlock: { (contact, error) -> Void in
validContacts.append(contact)
})
for validContact in validContacts {
// Do something with your contact, there should be only one.
}
} catch let e as NSError {
print(e)
}

关于Swift OSX CNContact.organizationName 在 High Sierra 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47938819/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com