swift3 – FileManager replaceItemAt()导致EXC_BAD_ACCESS

swift3 – FileManager replaceItemAt()导致EXC_BAD_ACCESS,第1张

概述我写了一个从网站下载图像的应用程序. 如果设备上已存在此图像,我正在尝试更换它. func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) { let userId = Int.init(downloadTask.tas 我写了一个从网站下载图像的应用程序.
如果设备上已存在此图像,我正在尝试更换它.

func urlSession(_ session: URLSession,downloadTask: URLSessionDownloadTask,dIDFinishDownloadingTo location: URL) {    let userID = Int.init(downloadTask.taskDescription!)! // task description is definetly set in downloadImage() and is an Int    guard let target = imageFolder?.appendingPathComponent("\(userID).jpg") else {        delegate?.imageDownloadFailed(forUser: userID,error: "Could not create target URL.")        return    }    do {        if fileManager.fileExists(atPath: target.path) {            _ = try fileManager.replaceItemAt(target,withItemAt: location)        } else {            try fileManager.moveItem(at: location,to: target)        }        delegate?.savedImage(forUser: userID,at: target)    } catch let error {        delegate?.imageDownloadFailed(forUser: userID,error: error.localizedDescription)    }}

问题发生在if语句中:

_ = try fileManager.replaceItemAt(target,withItemAt: location)

我总是得到EXC_BAD_ACCESS,我找不到错误.
fileManager,target和location都是非零的.
我已经尝试将代码同步调度到主线程,但错误仍然存​​在.

有什么建议吗?

编辑:

由于我不是唯一一个遇到此错误的人,所以我决定在Apple创建一个错误报告.
该报告可在Open Radar获得; click

我还上传了一个playground file at pastebin.com,它演示了错误并提供了类似于naudec的快速解决方案.

解决方法 有同样的问题.写完我自己的版本:

let fileManager = fileManager.defaultfunc copyItem(at srcURL: URL,to dstURL: URL) {    do {        try fileManager.copyItem(at: srcURL,to: dstURL)    } catch let error as NSError {        if error.code == NSfileWritefileExistsError {            print("file exists. Trying to replace")            replaceItem(at: dstURL,with: srcURL)        }    }}func replaceItem(at dstURL: URL,with srcURL: URL) {    do {        try fileManager.removeItem(at: dstURL)        copyItem(at: srcURL,to: dstURL)    } catch let error as NSError {        print(error.localizedDescription)    }}

我先调用copyItem.

总结

以上是内存溢出为你收集整理的swift3 – FileManager replaceItemAt()导致EXC_BAD_ACCESS全部内容,希望文章能够帮你解决swift3 – FileManager replaceItemAt()导致EXC_BAD_ACCESS所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1004468.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存