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

SceneKit保存scn文件到磁盘报MDLErrorDomain error 0该如何解决

问题根因
  • 写入路径不合法:scnScene.write(to:)方法要求传入带.scn后缀的完整文件路径,你当前传入的是文档目录的文件夹路径,系统无法将场景文件直接写入文件夹,触发MDLErrorDomain报错。
  • 隐式解包的scnScene在写入时如果存在未加载完成的资源,会触发属性依赖循环,引发AttributeGraph报错。
修正方案
  1. 拼接完整的保存文件路径,指定.scn后缀
  2. 增加写入配置选项,适配系统导出规则
  3. 避免强制解包SCNScene实例,增加异常判断
修正后代码
// 避免强制解包,可选接收SCNScene实例
var scnScene: SCNScene? = SCNScene(named: "Art.scnassets/Ship")

//获取 documents URL
func getDocumentsDirectory() -> URL {
    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
    return paths[0]
}

//保存scn到磁盘
func saveSCNFileToDisk() {
    guard let scnScene = scnScene else { return }
    // 拼接完整的scn文件路径
    let targetURL = getDocumentsDirectory().appendingPathComponent("SavedShip.scn")
    // 增加写入配置选项
    let writeOptions: [SCNScene.OutputOption: Any] = [
        .exportedFileType: SCNScene.FileType.scn,
        .convertToYUp: false,
        .compress: false
    ]
    scnScene.write(to: targetURL, options: writeOptions, delegate: nil) { progress, error, pointer in
        if let error = error {
            print(error.localizedDescription)
            return
        }
        self.scene = targetURL.absoluteString
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 17:36:02