Ios 如何将CGPATH持久化到CoreData
我正在iOS上制作一个绘图应用程序,希望将用户绘图保存到核心数据 我知道NSData是CoreData的一种属性类型,所以我考虑使用它Ios 如何将CGPATH持久化到CoreData,ios,swift,core-graphics,Ios,Swift,Core Graphics,我正在iOS上制作一个绘图应用程序,希望将用户绘图保存到核心数据 我知道NSData是CoreData的一种属性类型,所以我考虑使用它 我的想法是以某种方式将CGPATH数组转换为NSData,然后将NSData保存为核心数据。有人知道我将如何做这件事,或者有更好的解决方案吗?如果您将CGPath转换为UIBezierPath,它支持NSCoding/NSSecureCoding: do { let path = UIBezierPath(cgPath: cgPath) let
我的想法是以某种方式将CGPATH数组转换为NSData,然后将NSData保存为核心数据。有人知道我将如何做这件事,或者有更好的解决方案吗?如果您将
CGPath
转换为UIBezierPath
,它支持NSCoding
/NSSecureCoding
:
do {
let path = UIBezierPath(cgPath: cgPath)
let data = try NSKeyedArchiver.archivedData(withRootObject: path, requiringSecureCoding: false)
} catch {
print(error)
}
您还可以将数据
转换回UIBezierPath
:
do {
if let path = try NSKeyedUnarchiver.unarchivedObject(ofClass: UIBezierPath.self, from: data) {
let cgPath = path.cgPath
}
} catch {
print(error)
}
谢谢另外,您认为这是存储由CGPath组成的图形的有效方法吗?我通常直接使用
UIBezierPath
,而不是CGPath
(这消除了上述过程中的一个步骤)。我也会考虑捕获实际的模型信息(坐标),而不是存储相对不透明的CyeDiga/UIKIT对象作为斑点。关于效率,您应该对其进行基准测试,看看是否存在实质性差异。众所周知,SQLite在处理非常大的对象时效率很低,但您可能正在处理小到与此无关的blob。但只要对其进行基准测试就可以了。无论如何,这超出了上述问题的范围。