質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

2回答

419閲覧

ドキュメント内のファイルをテーブルに表示する

15DB109_hotaka

総合スコア22

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/01/11 09:54

ドキュメント下のCSVファイルをテーブルに表示させたいと考えています。
①試したこと

ドキュメント下のファイル名を取得(表示させるのはファイル名だけで良い)
TableViewをOutlet接続し、cellにファイル名を返すようにした

②上手くいかなかったこと

エラーは出ていないが、テーブルにファイル名が表示されない
(ファイル名を取得できていない?取得方法が間違えている?テーブルの設定がなされていない?)
ドキュメントのパスも取得しているので表示されると思うのですが、、、

わかる方いらっしゃいましたら、よろしくお願いします。

③該当コード

swift

1import UIKit 2 3class sampleViewController: UIViewController,UITableViewDataSource { 4 5let documentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] 6 7 8 var fileNames: [String] { 9 do { 10 return try FileManager.default.contentsOfDirectory(atPath: documentPath) 11 } catch { 12 return [] 13 } 14 } 15 16 @IBOutlet weak var CsvTableiew: UITableView! 17 override func viewDidLoad() { 18 super.viewDidLoad() 19 20 // Do any additional setup after loading the view. 21 } 22 23 override func didReceiveMemoryWarning() { 24 super.didReceiveMemoryWarning() 25 // Dispose of any resources that can be recreated. 26 } 27 28 func tableView(_ tableView:UITableView, cellForRowAt indexPath:IndexPath) -> UITableViewCell { 29 let documentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] 30 31 32 var fileNames: [String] { 33 do { 34 return try FileManager.default.contentsOfDirectory(atPath: documentPath) 35 } catch { 36 return [] 37 } 38 } 39 //セルを取得する。 40 let cell = tableView.dequeueReusableCell(withIdentifier: "TestCell", for:indexPath as IndexPath) as UITableViewCell 41 42 //カンマでデータを分割して配列に格納する。 43 let dataDetail = fileNames[indexPath.row] 44 cell.textLabel?.text = dataDetail 45 46 return cell 47 } 48 func tableView(_ tableView:UITableView, numberOfRowsInSection section:Int) -> Int { 49 return fileNames.count 50 } 51}

④開発環境

xcode8 swift3 MacBook Pro

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自分は超初心者なので、できれば詳しい方の登場をまちたいのですが。

以下の部分を、

//カンマでデータを分割して配列に格納する。
let dataDetail = fileNames[indexPath.row]
cell.textLabel?.text = dataDetail

↓のように書き換えて、実行して見てはいかがでしょうか?

print("fileNames:","/n",fileNames)
cell.textLabel?.text. = fileNames[indexPath.row].replacingOccurrences(of: ".csv", with: "")

フォルダ内のアイテム一覧が取得されていれば、fileNamesに以下のようなデータが入っているはずです。

fileNames:
["default.csv", "default01.csv", "default02.csv", "default03.csv"]

入ってればテーブルに反映されるはずですが。

投稿2018/01/11 13:03

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

15DB109_hotaka

2018/01/11 13:12

アドバイスありがとうございます!実行してみましたが、ファイルが取得できていないせいか、表示されませんでした。TableViewはアウトレット接続しないほうが良いのでしょうか?
退会済みユーザー

退会済みユーザー

2018/01/11 13:27

ちょっとまってくださいね。 ただ、とりあえず、値を取得してfileNamesに格納することが第一ですので、そこを考えてください。 ディレクトリ以下のファイル一覧を取得している箇所に、 print("fileNames:","/n",fileNames) を追加して、ファイル一覧の取得がきちんとできているか確かめてください。 なんか、2回取得してるのもなんで?と思うけど、それはそれとして。 あとでもうちょっと書きますね。
退会済みユーザー

退会済みユーザー

2018/01/11 14:08

let documentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] var fileNames: [String] { do { return try FileManager.default.contentsOfDirectory(atPath: documentPath) } catch { return [] } } ↑を var fileNmes = [String]() にして、 func tableView(_ tableView:UITableView, numberOfRowsInSection section:Int) -> Int { return fileNames.count } ↑を func tableView(_ tableView:UITableView, numberOfRowsInSection section:Int) -> Int {  if let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first { do { fileNames = try FileManager.default.contentsOfDirectory(atPath: documentDirectory) } catch { print("error") } } print("documentDirectory:",documentDirectory ) print("fileNmes:",fileNmes) return fileNames.count } に変えて実行してみてください。 パスとファイル一覧が取得できるはずです。パスがわかれば、ファイルをfinderでみれますので。 ファイル一覧が取得できたらテーブルビューに取り掛かってください。 エラーのところは適当なので書き直してください。 動いたら、documentDirectoryとfileNmesの宣言の場所は、どこで使うかで変わると思うのでお好みで。
15DB109_hotaka

2018/01/12 03:48

ほんとに丁寧にありがとうございます!!! 実行してみます!!
15DB109_hotaka

2018/01/12 04:47

print("documentDirectory:",documentDirectory )の記述で Use of unresolved identifier 'documentDirectory' エラーが出てしまいます。 スペルは当たっていると思うのですが、print("documentDirectory:",documentPath)に変更すると エラーが消えます。 ごめんなさい、ファイルパスをfinderで確認する方法を調べたのですが、取得したファイルの確認の仕方が わかりません。初心者申し訳有りません。
退会済みユーザー

退会済みユーザー

2018/01/12 07:59

print("documentDirectory:",documentDirectory )は、 直前で取得したパス (if let documentDirectory = NSSearchPathForD...のdocumentDirectory)を見れるように出力 してるだけですよ。 エラーが消えるのは良いのですが、documentPathの中身はどのようになってるでしょうか? 実行すればプリントされるはずですよ。 手順は 1.ファイルを用意する (Macでの作業ですよ。) 2.ファイルのディレクトリのパスを取得する 3.取得したパスを使って、ファイル名一覧を取得する 4.テーブルビューに表示する となると思います。 難しくありませんので確実に 一つ一つクリアしてみてください。
15DB109_hotaka

2018/01/12 15:37

ありがとうございます! もう一度試してみます!
guest

0

スマホ手持ち状態なので、返信が適当になりますが、ご容赦ください。
filenamesに配列は入っていますか?
入っているとしたら、多次元配列ではないので、
//カンマでデータを...
の下の2行を1次元配列向けに書き換えてみてはどうでしょうか?
変数定数の中身をつど確認するとわかりやすいですよ。

投稿2018/01/11 10:25

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

15DB109_hotaka

2018/01/11 12:02

filenames には配列を入れないといけないのですね。 filenames にはドキュメント下のファイル名が入っていると認識していました。 let documentPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] var fileNames: [String] { do { return try FileManager.default.contentsOfDirectory(atPath: documentPath) } catch { return [] } } この場合、ファイル名をテーブルに表示するにはどのよな記述が良いですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問