【发布时间】:2021-11-02 04:02:35
【问题描述】:
我将 UIBezierPaths 存储在 CoreData 中。为此,我必须将字段的类型设置为数据;我无法让 Transformable 工作,但确实如此。
但是,当我检索或存储这些路径时,我在编码/解码过程中遇到了错误。错误是
2021-11-02 09:08:39.138674+0700 TestSVG[82461:1408543] [general] 'NSKeyedUnarchiveFromData' should not be used to for un-archiving and will be removed in a future release
根据此处提供的帮助,我使用的方法是:
func bezierToData(path: UIBezierPath) -> Data? {
do {
return try NSKeyedArchiver.archivedData(withRootObject: path, requiringSecureCoding: false)
} catch {
return nil
}
}
func dataToBezier(src: Data) -> UIBezierPath? {
do {
return try NSKeyedUnarchiver.unarchivedObject(ofClass: UIBezierPath.self, from: src)!
} catch {
return nil
}
}
这似乎是 Apple 强加的多项更改。我的需求很简单,而且我正在做的事情很完美,但我当然不想遇到未来的问题。
这个答案:'NSKeyedUnarchiveFromData' should not be used to for un-archiving and will be removed in a future release 适用于可存储为可变形的对象,我无法正常工作。同样,这里的建议是使用 Data 并且效果很好。
我已经在这里和其他地方阅读了所有我能找到的答案,因为基本上,StackOverflow 通常会优先考虑在提出问题后立即接受的答案,并且当接受的答案过时时没有更新方法......它可以是在获得相关答案时,这是一个燃烧的混乱垃圾箱,至少对于像 moi 这样的相对新手而言。
但我离题了。谁能指出我当前的做法,让我可以简单地将 UIBezierPaths 序列化和反序列化到 CoreData 存储中?
【问题讨论】:
-
您也可以阅读NSSecureUnarchiveFromDataTransformer 的文档,它似乎真的是为您想要做的事情而构建的,但需要比
NSKeyedUnarchiver更多的设置。
标签: swift core-data uibezierpath archiving