Swift   发布时间:2022-04-30  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了swift3 – FileManager replaceItemAt()导致EXC_BAD_ACCESS大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我写了一个从网站下载图像的应用程序.
如果设备上已存在此图像,我正在尝试更换它.

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.default

func 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所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。