You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将PKDrawing对象存储到Core Data及读取初始化报错问题求助

问题解决方案

1 编译提示"cannot find type 'PKDrawing' in scope"的解决方法

  • 所有使用PKDrawing的Swift文件顶部都需要导入PencilKit框架,添加import PencilKit即可
  • 如果是在Core Data的模型文件中直接定义了PKDrawing类型的属性,建议改为使用Binary Data类型存储,避免自定义类型的额外配置成本,也能兼容后续的系统版本变化

2 PKDrawing反序列化报错的解决方法

错误原因

你混淆了PKDrawing两种不同的初始化方式:

  • init(from: Decoder)是Swift Codable协议的标准构造器,入参要求是遵循Decoder协议的实例,不能直接传入Data对象,所以强制类型转换会触发运行时崩溃
  • 你存储时调用的dataRepresentation()是PencilKit框架为PKDrawing提供的专属序列化方法,对应的反序列化方法是init(data: Data) throws,不是Codable的构造器

正确的反序列化代码

func createDrawing(data: Data) -> PKDrawing {
    do {
        let loadedDrawing = try PKDrawing(data: data)
        return loadedDrawing
    } catch {
        print("Error loading drawing object: \(error.localizedDescription)")
        return PKDrawing()
    }
}

额外优化建议

  • Core Data中存储笔迹数据的属性设置为Binary Data类型后,建议勾选"Allows External Storage"选项,系统会自动将大体积的二进制数据存到外部文件,减少Core Data数据库的负载,提升读写性能
  • 所有操作PKDrawing的代码都要确保在导入PencilKit框架的作用域下执行,避免编译报错

内容的提问来源于stack exchange,提问作者Badger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 21:18:03