如何使用nscoding编码通过委托传递的值



我真的使用了NSCODing功能,我正在尝试创建属性string的数据的持久性,尤其是通过委托的Uicolor。我还没有找到一个编码未声明和初始化的值的教程,其中Nscoding协议的同一类。

i具有以下代码,这是符合我创建的协议并将传递的颜色值作为属性属性的方法。

func didSelectColorCell(color: UIColor) {
    let coder = NSCoder.init()
    color.encode(with: coder)
    noteTextView.setAttributedValueAtSelectedTextRange(NSForegroundColorAttributeName, value: color)
}

该应用程序崩溃,并向我发送警告"无法发送到nScoder类的抽象对象:创建一个具体实例!"我真的很迷失方向。我不知道该如何适应此教程http://nshipster.com/nscoding/为我的场景。

有人可以为我提供有关如何订购我的想法的指导,或者Nscoding如何与代表一起工作?任何帮助将不胜感激:)

定义一个类以实现NScoding协议(游乐场样本):

class ColorHelper: NSObject, NSCoding {
    var color: UIColor?
    init(color: UIColor) {
        super.init()
        self.color = color
    }
    required init(coder aDecoder: NSCoder) {
        if let color = aDecoder.decodeObject(forKey: "color") as? UIColor {
            self.color = color
        }
    }
    func encode(with aCoder: NSCoder) {
        aCoder.encode(color, forKey: "color")
    }
    func save(defaults key: String) -> Bool {
        let defaults = UserDefaults.standard
        let savedData = NSKeyedArchiver.archivedData(withRootObject: data)
        defaults.set(savedData, forKey: key)
        return defaults.synchronize()
    }
    convenience init?(defaults key: String) {
        let defaults = UserDefaults.standard
        if let data = defaults.object(forKey: key) as? Data,
            let obj = NSKeyedUnarchiver.unarchiveObject(with: data) as? ColorHelper,
            let color = obj.color {
            self.init(color: color)
        } else {
            return nil
        }
    }
}
let data = ColorHelper(color: .red)
let savedData = NSKeyedArchiver.archivedData(withRootObject: data)
let obj = NSKeyedUnarchiver.unarchiveObject(with: savedData) as? ColorHelper
obj?.color

在您的代码中:

func didSelectColorCell(color: UIColor) {
    let helper = ColorHelper(color: color)
    helper.save(defaults: "color")
    noteTextView.setAttributedValueAtSelectedTextRange(NSForegroundColorAttributeName, value: color)
}

读取保存的数据:

let color = ColorHelper(defaults: "color")?.color

最新更新