2017-10-21 2 views
0

내가 어디 있는지 .document에서 URL을 가져 오기 위해 아래 코드를 사용해 QuickLook이 프레임 워크테이블보기 오류 치명적인 오류 : 인덱스 파일

을 준비하는 내있는 tableview에 URL 경로를로드하기 위해 노력하고있어를로드 할 때 범위를 벗어난 빈 그것은 첫째

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

다음 이름

에게 레이블을 제공하기 위해 아래의 코드를 사용하여 6,
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

섹션의 행 수를 확인하십시오. 귀하의 url에 존재하는 데이터보다 위의 행을 설정하려고 시도하는 중일 수 있습니다. – Amit

+0

@Amit이 당신이 언급 한 것입니까? FUNC에있는 tableView (_있는 tableView : jQuery과, numberOfRowsInSection 섹션 : INT) -> Int 인 { 반환 fileURLs.count } – JameS

+0

예,이 방법은 ... cellforRowAt_indexpath에 중단 점을 배치 다시 코드를 실행합니다. 그리고 코드가 충돌하는 반복을 확인하십시오. – Amit

답변

1

꽤 명백한 오류. 배열 fileUrls (NSURL) 범위 밖에있는 인덱스에 액세스하려고합니다. 코드에서 이와 같은 오류를 일으킬 수있는 한 가지 문제가 발생합니다.

아시다시피 코드 시작 부분에 빈 배열을 초기화합니다. 그런 다음 private func prepareFileURLS()에 NSURLS에이 문장 fileURLs.append(csvFile as NSURL)을 추가하여 배열을 채 웁니다. 질문은 입니다. 배열을 실제로 수행 했습니까? 귀하의 코드가 if 문 if FileManager.default.fileExists(atPath: csvFile.path)을 전달 했습니까? fileURLs 배열을 인쇄하여 그 내용과 길이를 확인하시기 바랍니다.

귀하의 발행물은 private func extractAndBreakFilenameInComponents(fileURL: NSURL) -> (fileName: String, fileExtension: String)return (filenameParts![0], filenameParts![1])과 함께 전달됩니다. 초기 배열 fileURL에는 설정되지 않은 느낌표 filenameParts로 언랩하지 않고 치명적인 오류를 일으키는 값 (= nil)이 없습니다.

+0

감사합니다 !! 이게 내가 원하는거야. 예, 사용자가 나중에 앱에서 파일을 만들 때까지 배열은 여전히 ​​비어 있습니다. 어리석은 소리 일지 모르지만 처음에는 파일이 없으므로 파일 경로를 옵션 값으로 반환하려면 어떻게해야합니까? @ Arrabidas92 – JameS

+0

? 앞에 – Arrabidas92