#ios #swift
#iOS #быстрый
Вопрос:
Я пытаюсь заполнить информацию CNMutableContact, чтобы сохранить ее и поделиться ею, и все работает отлично, кроме заметки (которая должна быть обычной строкой) и данных изображений.
Это то, что я пытаюсь сделать:
let contact = CNMutableContact() contact.note = "HELLO" if let imageUrl = self.getImgLogo(), let url = URL(string: imageUrl) { contact.imageData = try? Data(contentsOf: url) }
Я ввел в контакт больше вещей, таких как имя, фамилия, должность, социальные профили, номера телефонов, электронные письма … и все работает нормально, кроме этих двух вещей.
Кто — нибудь может сказать мне, не делаю ли я что-то не так?
Спасибо!
Ответ №1:
Я устранил проблему. Проблема была связана с сериализацией CNContactVCardSerialization, которая игнорировала примечание и данные изображения. Поэтому я сделал расширение для решения этой проблемы:
import Contacts extension CNContactVCardSerialization { class func dataWithExtraInformation(contacts: [CNContact]) throws -gt; Data { var text: String = "" for contact in contacts { let data = try CNContactVCardSerialization.data(with: [contact]) var str = String(data: data, encoding: .utf8)! if let imageData = contact.imageData { let base64 = imageData.base64EncodedString() str = str.replacingOccurrences(of: "END:VCARD", with: "PHOTO;ENCODING=b;TYPE=JPEG:(base64)nEND:VCARD") } if !contact.note.isEmpty { str = str.replacingOccurrences(of: "END:VCARD", with: "NOTE:(contact.note)nEND:VCARD") } text = text.appending(str) } return text.data(using: .utf8)! } }
Он просто получает сериализованную карту и добавляет дополнительную информацию, которая мне нужна 😉
Спасибо!