首页 > 解决方案 > UIColor 'NSKeyedUnarchiveFromData' 不应用于取消归档,并将在未来版本中删除

问题描述

您好,我只想在 CoreData 中保存 UIColor 属性,但收到警告:“'NSKeyedUnarchiveFromData' 不应用于取消归档,将在未来版本中删除”

CoreData 属性颜色

我像这样访问简单的属性:entry.color

我知道这篇文章解释了问题是什么以及如何解决它。

https://www.kairadiagne.com/2020/01/13/nssecurecoding-and-transformable-properties-in-core-data.html

https://danielbernal.co/coredata-transformable-and-nssecurecoding-in-ios-13/

我只是想为什么没有专门针对 UIColor 的示例代码,我认为许多开发人员正是需要这个。

编辑:

我将它从 Transformable 更改为 String 并使用了这个扩展,当然主要应用程序中的小调整是必要的,但它有效 :)

// https://stackoverflow.com/questions/14051807/how-can-i-get-a-hex-string-from-uicolor-or-from-rgb/40018698
extension UIColor {
      func toHexString() -> String {
          var r:CGFloat = 0
          var g:CGFloat = 0
          var b:CGFloat = 0
          var a:CGFloat = 0

          getRed(&r, green: &g, blue: &b, alpha: &a)

          let rgb:Int = (Int)(r*255)<<16 | (Int)(g*255)<<8 | (Int)(b*255)<<0

          return String(format:"#%06x", rgb)
      }
  }
// https://stackoverflow.com/questions/1560081/how-can-i-create-a-uicolor-from-a-hex-string
extension UIColor {
    convenience init(hexaString: String, alpha: CGFloat = 1) {
        let chars = Array(hexaString.dropFirst())
        self.init(red:   .init(strtoul(String(chars[0...1]),nil,16))/255,
                  green: .init(strtoul(String(chars[2...3]),nil,16))/255,
                  blue:  .init(strtoul(String(chars[4...5]),nil,16))/255,
                  alpha: alpha)}
}

标签: iosswift

解决方案


推荐阅读