Ios Swift-除首次使用外,文件路径不可用

Ios Swift-除首次使用外,文件路径不可用,ios,swift,nsfilemanager,Ios,Swift,Nsfilemanager,下面的代码是工作。图像已成功保存在文档目录中,但问题只是collectionViewController首次成功加载具有路径的图像。我必须删除所有图像以存储新图像,否则将显示错误消息 “致命错误:在展开可选文件时意外发现零。” 价值观” 由于路径不可用,readnsdata=NSData(contentsOfFile:filepath)将导致错误 我不知道为什么只有第一次它才能工作 路径: “/var/mobile/Containers/Data/Application/29306029-BDC

下面的代码是工作。图像已成功保存在文档目录中,但问题只是collectionViewController首次成功加载具有路径的图像。我必须删除所有图像以存储新图像,否则将显示错误消息

“致命错误:在展开可选文件时意外发现零。” 价值观”

由于路径不可用,
readnsdata=NSData(contentsOfFile:filepath)将导致错误

我不知道为什么只有第一次它才能工作

路径: “/var/mobile/Containers/Data/Application/29306029-BDCF-4BEA-93A6-D5626CBAA90/Documents/x.jpg”

func writeNSDataToDisk(imageData:NSData){
让myindex=imgPathArray.count
let fileName=“\(self.imgPathArray.count)”
让path=NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory,NSSearchPathDomainMask.UserDomainMask,true)
将docs:String=路径[0]设为字符串
让filepath:String=(文档为NSString.stringByAppendingPathComponent(“\(fileName.jpg”))
让test=imageData.writeToFile(文件路径,原子性:true)
如果测试{
self.imgPathArray.insert(文件路径,atIndex:myindex)
打印(“图片\(文件名).jpg已保存。”)
self.readORwriteList(true)//将列表写入txt文件
}
打印(self.imgPathArray)
}
func readNSDataFromDisk(fileIndex:Int)->NSData{
让checkValidation=NSFileManager.defaultManager()
var readnsdata=NSData()

如果(fileIndex替换
readnsdata=NSData(contentsOfFile:filepath)!
readnsdata=NSData(contentsOfFile:filepath)
。希望这会有帮助:)

替换
readnsdata=NSData(contentsOfFile:filepath)!
readnsdata=NSData(contentsOfFile:filepath)?
。希望这会有所帮助:)

首先是一个旁注。苹果公司特别建议不要使用
fileExistsAtPath
您在这里使用的方式

正在尝试基于的当前状态断言行为 文件系统或文件系统上的特定文件不可用 推荐。这样做可能会导致奇怪的行为或种族状况。这是 尝试一个操作(例如加载文件或创建 目录),检查错误,并优雅地处理这些错误 而不是试图提前弄清楚操作是否正确 我们会成功的

尝试替换这个

if (checkValidation.fileExistsAtPath(filepath)){
    print("File is available")
    print("load \(fileIndex).jpg,filepath is \(filepath)")
    readnsdata = NSData(contentsOfFile: filepath)!
    if readnsdata.length != 0 {
        getImageProperties(readnsdata)
    }
}
else{
    print("File is not available!!!")
}
…用这个

do {
    readnsdata = try NSData(contentsOfFile: filepath, options: .DataReadingMappedIfSafe)
    if readnsdata.length != 0 {
        getImageProperties(readnsdata)
    }
}
catch let e {
    print("Couldn't read file at \(filepath) because \(e)")
}
这种方法无需猜测即可提供所需的信息。只需运行代码,看看NSData初始值设定项抛出时会发生什么!:)


[更新:非主题意见]

虽然不在长方法中添加返回是一个好习惯,但这里没有太多内容。我个人认为,如果没有临时
readnsdata
变量,代码的可读性会更高。这样一来,在我看来,快乐路径和默认返回值在第一次读取时都很清楚:

func readNSDataFromDisk2(fileIndex:Int) -> NSData{
    if (fileIndex <= self.imgPathArray.count) {
        let path = self.imgPathArray[fileIndex]
        do {
            let data = try NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe)
            if data.length != 0 {
                getImageProperties(data)
            }
            return data
        }
        catch let e {
            print("Couldn't read file at \(path) because \(e)")
        }
    }
    return NSData()
}
func readNSDataFromDisk2(文件索引:Int)->NSData{

if(fileIndex首先是一个旁注。苹果公司特别建议不要使用
fileExistsAtPath
您在这里使用的方式

正在尝试基于的当前状态断言行为 文件系统或文件系统上的特定文件不可用 推荐。这样做可能会导致奇怪的行为或种族状况。这是 尝试一个操作(例如加载文件或创建 目录),检查错误,并优雅地处理这些错误 而不是试图提前弄清楚操作是否正确 我们会成功的

尝试替换这个

if (checkValidation.fileExistsAtPath(filepath)){
    print("File is available")
    print("load \(fileIndex).jpg,filepath is \(filepath)")
    readnsdata = NSData(contentsOfFile: filepath)!
    if readnsdata.length != 0 {
        getImageProperties(readnsdata)
    }
}
else{
    print("File is not available!!!")
}
…用这个

do {
    readnsdata = try NSData(contentsOfFile: filepath, options: .DataReadingMappedIfSafe)
    if readnsdata.length != 0 {
        getImageProperties(readnsdata)
    }
}
catch let e {
    print("Couldn't read file at \(filepath) because \(e)")
}
这种方法无需猜测即可提供所需的信息。只需运行代码,看看NSData初始值设定项抛出时会发生什么!:)


[更新:非主题意见]

虽然不在长方法中添加返回是一个好习惯,但这里没有太多内容。我个人认为,如果没有临时
readnsdata
变量,代码的可读性会更高。这样一来,在我看来,快乐路径和默认返回值在第一次读取时都很清楚:

func readNSDataFromDisk2(fileIndex:Int) -> NSData{
    if (fileIndex <= self.imgPathArray.count) {
        let path = self.imgPathArray[fileIndex]
        do {
            let data = try NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe)
            if data.length != 0 {
                getImageProperties(data)
            }
            return data
        }
        catch let e {
            print("Couldn't read file at \(path) because \(e)")
        }
    }
    return NSData()
}
func readNSDataFromDisk2(文件索引:Int)->NSData{

如果(fileIndex)我从你的答案中受益匪浅。希望我的代码风格变得更加清晰:pI从你的答案中受益匪浅。希望我的代码风格变得更加清晰:p