Table view error Fatal error: Index out of range when loading file

删除回忆录丶 提交于 2020-01-05 08:46:31

问题


I'm trying to load the url path into my tableview preparing for quicklook framework

using the code below to fetch the url from .document where it is empty when it was first created

var fileURLs = [NSURL]()

then

private func prepareFileURLS() {
    let csvFile = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)).last! as URL
    if FileManager.default.fileExists(atPath: csvFile.path) {
        fileURLs.append(csvFile as NSURL)
        print(fileURLs)
    }
}

then using the code below to give the label a name

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let objectIdentifier = "ObjectsTableViewCell"

    guard let cell = tableView.dequeueReusableCell(withIdentifier: objectIdentifier, for: indexPath) as? ObjectsTableViewCell else {
        fatalError("The dequeued cell is not an instance of ObjectsTableViewCell")
    }

    //quickview
    // Fetches the appropriate object for the data source layout
    let currentFileParts = extractAndBreakFilenameInComponents(fileURL: fileURLs[indexPath.row])

    cell.nameLabel.text = currentFileParts.fileName
    //cell.photoImageView.image = cur.photo
    //quickview
    cell.descriptionLabel.text = getFileTypeFromFileExtension(fileExtension: currentFileParts.fileExtension)

    return cell
}

and using the method below to break down path into string where it cause the error

private func extractAndBreakFilenameInComponents(fileURL: NSURL) -> (fileName: String, fileExtension: String) {
    // Break the NSURL path into its components and create a new array with those components.
    let fileURLParts = fileURL.path!.components(separatedBy: "/")

    // Get the file name from the last position of the array above.
    let fileName = fileURLParts.last

    // Break the file name into its components based on the period symbol (".").
    let filenameParts = fileName?.components(separatedBy: ".")

    // Return a tuple.
    return (filenameParts![0], filenameParts![1]) --> Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
}

fatal error: Index out of range what did I do wrong ?


回答1:


Pretty explicit error. You are trying to access to an index out of the range of your array fileUrls of NSURL. With your code, I see one possible issue causing this kind of error.

As you know, you initialize an empty array at the beginning of your code. Then, in your private func prepareFileURLS() you fill your array by appending your NSURLS with this statement fileURLs.append(csvFile as NSURL). The question is did you really fulfill your array ? Did your code pass your if statement if FileManager.default.fileExists(atPath: csvFile.path)? I encourage you to print your fileURLs array to see what it contains and his length.

Then your isssue is going to propagate in your private func extractAndBreakFilenameInComponents(fileURL: NSURL) -> (fileName: String, fileExtension: String) with this statement return (filenameParts![0], filenameParts![1]). As your initial array fileURLs contains nothing you unwrap with your exclamation mark filenameParts which is not set and there is no value (=nil) causing your fatal error.



来源:https://stackoverflow.com/questions/46863774/table-view-error-fatal-error-index-out-of-range-when-loading-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!