ios - 将 CNContact 保存在 UserDefaults 中

标签 ios swift nsuserdefaults cncontact

我尝试将 CNContact 详细信息保存到我的 UserDefaults 中,但失败了。 还有其他方法可以保存 CNContact 吗?

struct User {
    var firstName: String = ""
    var lastName: String = ""
    var email: String = ""
    var phoneNumber: String = ""
    var company: String = ""
    var assistantContact: CNContact?

    init(firstName: String, lastName: String, email: String, phoneNumber: String, company: String, assistantContact: CNContact? = nil) {
        self.firstName = firstName
        self.lastName = lastName
        self.email = email
        self.phoneNumber = phoneNumber
        self.company = company
        self.assistantContact = assistantContact
    }

    func encode() -> Dictionary<String, AnyObject> {

        var dictionary : Dictionary = Dictionary<String, AnyObject>()
        dictionary["firstName"] = firstName as AnyObject?
        dictionary["lastName"] = lastName as AnyObject?
        dictionary["email"] = email as AnyObject?
        dictionary["phoneNumber"] = phoneNumber as AnyObject?
        dictionary["company"] = company as AnyObject?
        dictionary["assistantContact"] = assistantContact as AnyObject?
        return dictionary

    }

    init(dictionary: Dictionary<String, AnyObject>) {
        if let firstName = dictionary["firstName"] as? String {
            self.firstName = firstName
        }
        if let lastName = dictionary["lastName"] as? String {
            self.lastName = lastName
        }
        if let email = dictionary["email"] as? String {
            self.email = email
        }
        if let phoneNumber = dictionary["phoneNumber"] as? String {
            self.phoneNumber = phoneNumber
        }
        if let company = dictionary["company"] as? String {
            self.company = company
        }
        if let assistantContact = dictionary["assistantContact"] as? CNContact {
            self.assistantContact = assistantContact
        }
    }

}

最佳答案

首先使用编码联系人数组。

let encodedData: Data = NSKeyedArchiver.archivedData(withRootObject: contactsArray)

现在将编码数据保存在 UserDefaults 中。

对于解码联系人数组,

if let contacts: [CNContact] = decodedData as? [CNContact] {
            //Decoded Contacts Array
 }

关于ios - 将 CNContact 保存在 UserDefaults 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47028160/

相关文章:

javascript - Hammer.js 阻止 iOS Safari 上的滚动事件

ios - 如何将 Firebase 中的用户个人列表抓取到表格 View

ios - 为什么我的 ios/osx 框架忽略 GCC_PREFIX_HEADER?

ios - UIImageView 使用自动布局垂直拉伸(stretch)

xcode - 仅使用 RAM 的操作

ios - 合并重复的 CNCONTACT 数组 swift 3 联系人框架

ios - 我对 Obj-c 委托(delegate)做错了什么

swift - 当我在 Swift 中保存到 NSUserDefaults 时,NSDictionary 变成 NSCFString

ios - 如何将保存的数据重置为默认值?

ios - switch in a tableview with UserDefaults, several is activated by itself