首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >第二次复制文件时,Swfit FileManager与EXC_BAD_ACCESS一起崩溃

第二次复制文件时,Swfit FileManager与EXC_BAD_ACCESS一起崩溃
EN

Stack Overflow用户
提问于 2018-05-04 22:10:03
回答 1查看 309关注 0票数 0

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

相关代码如下:

代码语言:javascript
复制
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崩溃总是发生在下面的代码行:

代码语言:javascript
复制
try fm.copyItem(at: existingINIURL, to: outputURL.appendingPathComponent("CONTROL.INI"))

由于这是一个访问错误,当然,它永远不会到达catch语句,无法给我任何关于问题是什么的指示。

有趣的注意:我没有使用.appendingPathComponent("CONTROL.INI")复制,而是尝试使用当前名称复制文件,然后在单独的步骤中重命名复制的文件。当我这样做的时候,它一开始看起来还在工作,但实际上它只工作了3-4次,然后以同样的方式崩溃,而不是总是在第二次尝试时崩溃,仍然是在fm.copyItem行。

有没有人在FileManager上遇到过类似的问题?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-05-05 06:09:19

我想通了。这是因为我忘记在默认FileManager上设置了一个委托,该委托在第一个周期后不再存在。在我更改了需要委托才能使用自己的FileManager实例的函数之后,这个问题就消失了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50176954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档