2017-10-21 63 views
0

我尝试使用下面的代码它在哪里来从.document的URL用于快框架表视图错误致命错误:超出范围的索引加载文件

准备URL路径加载到我的tableview时空当它第一次创建

var fileURLs = [NSURL]() 

然后

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) 
    } 
} 

然后使用下面的代码给标签的名称

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 
} 

,并使用下面的方法来打破路径转换为字符串它导致错误

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) 
} 

致命错误:超出范围的索引 我做了什么错?

+0

检查您的节数。也许你正试图设置比你的网址中存在的数据高的行数。 – Amit

+0

@Amit是你提到的那个吗? FUNC的tableView(_的tableView:UITableView的,numberOfRowsInSection段中:int) - >诠释{ 回报fileURLs.count } – JameS

+0

是的,这是方法...与放置断点cellforRowAt_indexpath再次运行代码。并检查你的代码崩溃的迭代。 – Amit

回答

1

非常明确的错误。您正尝试访问NSURL的数组fileUrls以外的索引。 用你的代码,我看到一个可能的问题导致这种错误。如你所知,你在代码的开头初始化一个空数组。然后,在您的private func prepareFileURLS()中,通过在您的NSURLS中添加此语句fileURLs.append(csvFile as NSURL)来填充阵列。问题是你真的完成了你的阵列吗?您的代码是否通过了您的if语句if FileManager.default.fileExists(atPath: csvFile.path)我鼓励你打印你的fileURLs数组,看看它包含了什么和他的长度。

然后您的isssue将在您的private func extractAndBreakFilenameInComponents(fileURL: NSURL) -> (fileName: String, fileExtension: String)中传播,并使用此语句return (filenameParts![0], filenameParts![1])。由于您的初始数组fileURLs不包含任何内容,所以您未使用感叹号filenameParts进行解包,并且没有值(= nil)导致致命错误。

+0

谢谢!这正是我所寻找的。是的,直到用户在应用程序中创建文件之后,数组仍然是空的。这可能听起来很愚蠢,但我怎样才能返回带有可选值的文件路径,因为在开始时不会有任何文件。 @ Arrabidas92 – JameS

+0

使它成为可选的?在前面 – Arrabidas92

相关问题