2017-11-05 3 views
1

私はこの上のアプリケーションがエラーを実行するたびにのUITableViewに表示し、クイックビューdocumentDirectoryからロードファイルのURLに

var fileURLs: [NSURL] = [] 

を使用してそれらを読むためにドキュメントディレクトリ内のファイルをロードしようとしてきました"範囲外のインデックス" としてライン[indexPath.row]

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 
    if QLPreviewController.canPreview(fileURLs[indexPath.row]) { 
     quickLookController.currentPreviewItemIndex = indexPath.row 
     navigationController?.pushViewController(quickLookController, animated: true) 
    } 
} 

fileURLsアレイ

以下の方法で添付されているfileURLsに
private func prepareFileURLS() { 
    let fileManager = FileManager.default 
    let path = fileManager.urls(for: .documentDirectory, in: .userDomainMask).last! as NSURL 
    let fileName = String(describing: path.lastPathComponent) 
    let pathString = String(describing: path.absoluteURL) 
    fileNames.append(fileName) 

    if FileManager.default.fileExists(atPath: pathString) { 
     fileURLs.append(path as NSURL) 
     print(fileURLs) 
    } 
} 

と結果たびに、私はそれをチェックする際に空の配列である、とだけ文書のパスを返さないファイルパス自体

[] 
Optional(file:///Users/N/Library/Developer/CoreSimulator/Devices/EC72CD97-87F4-478E-967C-6BA135B2EC6C/data/Containers/Data/Application/0778931B-77DD-4CE8-92BF-E9A8002F901D/Documents/) 

私は手動でフォルダをチェックしたときにそこにあるファイルは、彼らのです。 誰でも上記のコードに何が間違っているかを知っていますか?

追加**それはビューにすることはできませんを除いて、それはモデルファイルから名前やその他のデータをロードするので、完全に罰金表番組でファイル

ここ
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    // #warning Incomplete implementation, return the number of rows 
    //tableView.reloadData() 
    return csvFiles.count 
} 

は、データモデルである

class CSVData { 

// MARK: Properties 
var name: String 
var descriptions: String 
var photo: UIImage? 
var url: NSURL 


// MARK: Init 
init?(name: String, descriptions: String?, photo: UIImage?, url: NSURL){ 
    // init should fail if there is no name 
    if name.isEmpty { 
     return nil 
    } 

    self.name = name 
    self.descriptions = descriptions ?? "" 
    self.photo = photo 
    self.url = url 
} 

}

+0

あなたの配列に要素があるよりも多くの行がtableviewに伝えられているようだから、あなたの 'numberOfRowsInSecrion'関数を表示する必要があります。 – Paulw11

+0

@ Paulw11もっと詳しい情報を追加しました。ファイルは表示できないことを除いてテーブルに完全に表示されます。私が推測しているのは、そのURLにアクセスできないからです。データモデルにはURLも含まれていますが、使用方法はわかりません。 – JameS

+1

'absoluteURL'はパスを返しません。 URLパスを取得するには、 'path'プロパティを取得する必要があります。 url absoluteStringを渡すと、 'fileExists(atPath:)'は常に失敗します。 'FileManager.default.fileExists(atPath:url.path)'です。そして、 'String(describe:)'を使用しないでください。 –

答えて

1

fileManager.urlsは、そのディレクトリ内のファイルの配列ではなく、ドメイン上のディレクトリの配列を返します。ファイルパスを取得するには、FileManagerのcontentsOfDirectoryを使用する必要があります。 https://stackoverflow.com/a/27722526/6835150

関連する問題