gpt4 book ai didi

ios - 如何在自定义 CNContactViewController 中异步更新图像

转载 作者:行者123 更新时间:2023-11-28 07:23:02 24 4
gpt4 key购买 nike

我的应用程序有一个本地联系人数据库,没有存储在内部联系人存储中(但是用户可以选择将联系人添加到内部联系人存储中)

我正在使用 CNContactViewController 来显示联系人的详细信息 - 但图像并不(总是)存储在数据库中,并且必须在每次请求时加载(异步)。

ContactModel 类的最小化版本:

class ContactModel {

var id: String
var givenName: String?
var thumbnail: Data?

init?(_ identifier: String?, givenName: String? = nil)
{
if ((identifier ?? "").isEmpty) {
return nil
}
self.id = identifier
}

func toMutableContact() -> CNMutableContact
{
let contact = CNMutableContact()
contact.contactType = .person
contact.givenName = givenName

if let thumbnail = thumbnail {
contact.imageData = thumbnail
}

return contact
}
}

以下代码显示联系人详细信息并从在线服务获取缩略图

func showContact(_ model : ContactModel)
{
// Create a 'CNMutableContact' from the 'ContactModel' object
let contact : CNMutableContact = model.toMutableContact()

let store = CNContactStore()
let cvc = CNContactViewController(forUnknownContact: contact)
cvc.delegate = self
cvc.contactStore = CNContactStore()
cvc.allowsEditing = false
self.navigationController?.pushViewController(cvc, animated: true)

var hasThumbnail: Bool = false
if let _ = model.thumbnail {
hasThumbnail = true
}

if !hasThumbnail {
// Get the thumbnail from the online service
getThumbnail(id: model.id) { (data, error) in

// Everything above works as expected!

// This does not work either
contact.givenName = "XXX"

if let data = data {
// How can I update the image ?
print("imageDataAvailable (before): \(contact.imageDataAvailable)") // returns: false
contact.imageData = data
print("imageDataAvailable (after): \(contact.imageDataAvailable)") // returns: true
}
}
}
}

我不会将联系人保存到内部联系人存储中 - 只是使用 CNContactViewController 查看详细信息。

如果图像是在 ContactModel 中设置的,则图像会完美显示 - 但如果之后更改了任何值,则 View 不会更新。

(由于空间占用,用户可以选择不将缩略图保存到本地数据库)

最佳答案

你不能那样做。 CNContactViewController 显示的联系人是一个不可变的联系人,与您一开始创建的 CNMutableContact 没有任何联系(它是一个副本)。

关于ios - 如何在自定义 CNContactViewController 中异步更新图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57492505/

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