Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何将CGPATH持久化到CoreData_Ios_Swift_Core Graphics - Fatal编程技术网

Ios 如何将CGPATH持久化到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

我正在iOS上制作一个绘图应用程序,希望将用户绘图保存到核心数据

我知道NSData是CoreData的一种属性类型,所以我考虑使用它


我的想法是以某种方式将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。但只要对其进行基准测试就可以了。无论如何,这超出了上述问题的范围。