我们使用 RoomPlan API 来捕获数据,这些数据存储在代码中的“CapturedRoom”变量中(称为“finalResult”)。然后,我们尝试在文件管理器中保存 USDZ 文件。有时它有效,但有时我们会遇到如下问题
Coding Error: in _IsValidPathForCreatingPrim at line 3338 of usd/stage.cpp -- Path must be an absolute path: <>
无法创建节点(路径:“/9EE71ED0F8D6415496A7B9F0C3671DB0321”)
这是我们用于删除 CapturedRoom 数据的代码
func saveFileLocal() {
if let finalResult {
let fm = FileManager.default
let documentsURL = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
//let documentsURL = URL.documentsDirectory
let fileName = "\(UUID().uuidString).usdz"
let fileURL = documentsURL.appendingPathComponent(fileName)
do {
try finalResult.export(to: fileURL)
} catch {
print(error)
}
}
}
你的代码有点混乱。
就
URL
而言,path
是一个文件系统字符串路径,你所有的path
变量实际上都是URL
s。
absoluteURL
在此上下文中不执行任何操作,请将其删除。
而
absoluteString
绕行毫无意义,path.appendingPathComponent(c)
是你想要的URL,但使用contentsOfDirectory(at:includingPropertiesForKeys:)
你可以免费获得完整的URL。
func saveFileLocal() {
if let finalResult {
let fm = FileManager.default
let documentsURL = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
// or let documentsURL = URL.documentsDirectory
let fileName = "\(UUID().uuidString).usdz"
let fileURL = documentsURL.appendingPathComponent(fileName)
do {
try finalResult.export(to: fileURL)
} catch {
print(error)
}
}
}
func removeFiles() {
let fm = FileManager.default
let documentsURL = fm.urls(for: .documentDirectory, in: .userDomainMask).first!
// or let documentsURL = URL.documentsDirectory
do {
let content = try fm.contentsOfDirectory(at: documentsURL, includingPropertiesForKeys: nil, options: .skipsHiddenFiles)
for anURL in content {
try fm.removeItem(at: anURL)
}
} catch {
print(error)
}
}