xcode 为什么在Swift中追加新文件时会出现“index out of bounds”错误?

5gfr0r5j  于 2022-12-19  发布在  Swift
关注(0)|答案(1)|浏览(108)

我对swift很陌生,我的应用程序中有一个功能,它可以设置自动录音的时间表。录音可以在给定的时间成功地开始和停止。但是,当我点击"录音"按钮检查创建的录音文件时,我得到了一个运行时错误。
你知道为什么会这样吗?
我不认为这应该是一个问题,因为我只是自动化一个预先存在的功能。我最初有一个功能,成功地记录何时开始和停止按钮的功能是手动按下,文件是在文件夹"记录"中创建的
下面是我的代码:

/*
 This will change recordings to fileitmes and add to an array, this array is used by the table view, which will then show the recordings
 */
func addToRecordings(folder: String) {
    let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
    let path = documentsDirectory.appendingPathComponent(folder).absoluteURL
    do {
        let directoryContents = try FileManager.default.contentsOfDirectory(at: path, includingPropertiesForKeys: nil, options: [])
        //only want the wav files
        let wavFiles = directoryContents.filter{ $0.pathExtension == "wav" }
        for file in wavFiles{
            let fileName = file.lastPathComponent
            let start = fileName.index(fileName.startIndex, offsetBy: 26)
            let end = fileName.index(fileName.endIndex, offsetBy: -4)
            let range = start..<end
            //create id to help sort the wav files 
            let id = Int(fileName[range]) ?? 0
            if let fileAttributes = try? FileManager.default.attributesOfItem(atPath: file.path) {
                if let bytes = fileAttributes[.size] as? Int64 {
                    let fileSize = fileByteCountFormatter.string(fromByteCount: bytes)
                    let recording = FileItem(id: id, fileName: fileName, fileSizeSpecific: fileSize, fileSizeBytes: bytes, fileLocation: folder+fileName)
                    self.recordings.append(recording!)
                }
            }
        }
        self.recordings = self.recordings.sorted(by: {$0.id < $1.id})
        self.tableView.reloadData()
    } catch {
        print(error)
    }
    if recordings.isEmpty{
        recordingsActionButton.isHidden = true
        self.selectAllButton.isHidden = true
        progressBar.isHidden = true
    }else {
        recordingsActionButton.isHidden = false
        self.selectAllButton.isHidden = false
    }
}

错误在这里:第一个月
非常感谢您的到来!

sg24os4d

sg24os4d1#

如果fileName短于26个字符,则该行将给予超出边界的索引:

let start = fileName.index(fileName.startIndex, offsetBy: 26)

相关问题