我将联系人导入我的应用程序并将其插入到tableview中。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: importCellId, for: indexPath) as! tbcImportContact
cell.contact = contacts[indexPath.row]
return cell
}
当我设置联系人图片时,就像我在这里一样:
var contact: Contact? {
didSet {
if let name = contact?.name {
nameLabel.text = name
} else {
nameLabel.text = ""
}
if let img = contact?.contactImage {
contactImage.image = img
} else {
contactImage.image = UIImage(named: "emptyProfile")
}
}
下一次与nil
图片的联系应该会收到UIImage(named: "emptyProfile")
,但联系人会被分配以前的联系人图片。
我尝试添加else
语句以防止这种情况,但它不起作用。
我也尝试过添加:
override func prepareForReuse() {
self.contactImage.image = UIImage(named: "emptyProfile")
self.nameLabel.text = ""
}
在为其分配联系人时重置单元格,但也无效。 我也尝试在主线程上设置异步,但也没有用。
有关我可以尝试解决此问题的任何建议吗?
答案 0 :(得分:1)
当我导入这样的联系人时,我最终只是设置了单元格的图像:
if let imageData = contact.imageData {
image = UIImage(data: imageData)
} else {
image = UIImage(named: "contactProfile")
}
这是关于我如何导入联系人的代码:
do {
let keysToFetch = keys as [CNKeyDescriptor]
try contactsStore.enumerateContacts(with: CNContactFetchRequest(keysToFetch: keysToFetch)) {
(contact, cursor) -> Void in
for phoneNumber in contact.phoneNumbers {
let phoneNumberString = phoneNumber.value.stringValue
if let imageData = contact.imageData {
image = UIImage(data: imageData)
} else {
image = UIImage(named: "contactProfile")
}
let emailAddress = contact.emailAddresses.count > 0 ? contact.emailAddresses[0].value : ""
let postalAddress = contact.postalAddresses.count > 0 ? "\(contact.postalAddresses[0].value)" : ""
self.contacts.append(Contact(name: contact.givenName, phoneNumber: phoneNumberString, contactImage: image, email: emailAddress as String , address: postalAddress))
}
}
if contacts.count == 0 {
message = "No contacts found."
}
} catch {
message = "Unable to fetch contacts."
}