无法加载本地.scn文件求助(报错NSCocoaErrorDomain Code=259)
解决加载本地.scn文件失败(Error Code 259)的问题
第一步:确认文件实际位置是否匹配代码路径
你代码里调用的.documentDirectory是应用沙盒的文档目录,而你提到的「Files文件夹」如果是系统“文件”App里的目录,二者大概率不重合:
- 系统“文件”App的文件夹可能是iCloud云盘或共享目录,和应用沙盒目录相互独立
- 先在代码里打印实际加载路径,验证文件是否存在于该位置:
let scnURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!.appendingPathComponent("test.scn") print("实际加载路径:\(scnURL.path)") // 输出路径用于验证 do { let savedScene = try SCNScene(url: scnURL, options: nil) } catch { print("错误详情:\(error)") } - 可以通过Xcode查看App沙盒内容确认文件位置:
- 打开Xcode → Window → Devices and Simulators
- 选中你的设备和目标App → 点击「Download Container...」导出沙盒包
- 右键导出的包 → 显示包内容 → 进入Documents目录,检查是否存在
test.scn
第二步:验证.scn文件本身的有效性
如果文件确实在正确路径,大概率是文件格式损坏或不被SceneKit识别:
- 用Xcode直接打开该
test.scn文件,若Xcode无法正常显示场景内容,说明文件本身有问题,需要重新导出或创建标准的.scn文件 - 确保文件是通过SceneKit编辑器导出或代码正确生成的,不是手动修改后缀名的无效文件
第三步:若文件在iCloud云盘,调整路径获取逻辑
如果「Files文件夹」指的是iCloud云盘目录,需改用iCloud容器路径:
// 前提是已在Xcode项目中开启iCloud能力并配置容器 if let iCloudURL = FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents").appendingPathComponent("test.scn") { print("iCloud路径:\(iCloudURL.path)") do { let savedScene = try SCNScene(url: iCloudURL, options: nil) } catch { print("错误详情:\(error)") } } else { print("iCloud容器未配置或不可用") }
配置iCloud能力:在Xcode项目的「Signing & Capabilities」中添加iCloud,勾选「iCloud Documents」并设置对应容器ID
第四步:通过文件选择器获取有效权限(可选)
如果文件在共享目录,可让用户手动选择文件以确保权限和路径正确:
let documentPicker = UIDocumentPickerViewController(forOpeningContentTypes: [.scenekitScene]) documentPicker.delegate = self documentPicker.allowsMultipleSelection = false present(documentPicker, animated: true) // 实现代理方法 extension YourViewController: UIDocumentPickerDelegate { func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) { guard let scnURL = urls.first else { return } do { let savedScene = try SCNScene(url: scnURL, options: nil) // 处理加载后的场景 } catch { print("错误详情:\(error)") } } }
内容的提问来源于stack exchange,提问作者User0829
相关产品推荐
相关产品推荐

