gpt4 book ai didi

swift - 第二次复制文件时,Swift 文件管理器因 EXC_BAD_ACCESS 崩溃

转载 作者:行者123 更新时间:2023-11-30 11:31:51 27 4
gpt4 key购买 nike

我正在编写一个MacOS应用程序,其进程在Application Support目录中创建一个临时文件夹,在该文件夹中生成一些新文件,然后还将一些用户指定的文件复制到其中,最后复制完整的文件我的临时文件夹的内容到用户指定的最终位置。启动应用程序后第一次运行此导出过程时,一切正常,但如果运行多次,则会崩溃并出现 EXC_BAD_ACCESS 错误。应用程序生成的文件始终可以正常创建和写入,但当 FileManager 尝试复制现有的用户选择的文件之一时,总是会发生崩溃,即使它通过了我的保护语句检查现有文件是否可读以及目标路径是可写的。如果您重新启动该应用程序,它第一次会再次运行,没有问题,但第二次会崩溃。

相关代码如下:

let fm = FileManager.default
guard let existingINIURL = currentExportProfile!.existingINIFileURL else {
return (false, "No INI file location provided.")
}

guard fm.fileExists(atPath: existingINIURL.path), fm.isReadableFile(atPath: existingINIURL.path) else {
return (false, "Could not find INI file at specified path: \(existingINIURL.path) or path is not readable.")
}

guard let outputURL = exportTempFilesURL?.appendingPathComponent("OUTPUT", isDirectory: true), fm.fileExists(atPath: outputURL.path) else {
return (false, "Problem accessing temp staging path")
}

guard fm.isReadableFile(atPath: existingINIURL.path) else {
return (false, "Existing file is not readable")
}

guard fm.isWritableFile(atPath: outputURL.path) else {
return (false, "Destination \(outputURL.path) is not writable")
}

do {
try fm.copyItem(at: existingINIURL, to: outputURL.appendingPathComponent("CONTROL.INI"))
return (true, nil)
} catch let error as NSError {
Swift.print("Failed to copy existing INI with error: \(error)")
return (false, "Failed to copy existing INI file with error: \(error)")
}

EXC_BAD_ACCESS 崩溃总是发生在以下行:

try fm.copyItem(at: existingINIURL, to: outputURL.appendingPathComponent("CONTROL.INI"))

既然这是一个访问错误,当然它永远不会到达 catch 语句来给我任何问题的指示。

有趣的说明:我尝试使用当前名称复制文件,然后在单独的步骤中重命名复制的文件,而不是使用 .appendingPathComponent("CONTROL.INI") 进行复制。当我这样做时,它一开始似乎可以工作,但实际上它只工作了 3-4 次,然后以相同的方式崩溃,而不是在第二次尝试时总是因相同的错误而崩溃,仍然处于 fm.copyItem 行。

有人在使用 FileManager 时遇到过类似问题吗?

谢谢!

最佳答案

我明白了。这是因为我忘记了我在默认 FileManager 上设置了一个委托(delegate),该委托(delegate)在第一个周期后不再存在。在我更改了需要委托(delegate)来使用其自己的 FileManager 实例的函数后,问题就消失了。

关于swift - 第二次复制文件时,Swift 文件管理器因 EXC_BAD_ACCESS 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50176954/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com