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

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

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

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

Swift

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

iOS 8

iOS 8(アイ・オーエス8)は、アップル社が2014年9月に発表したオペレーティングシステムです。iPhone 4sより対応しています。デザイン性の変更はなく、アプリや各種機能が強化されています。また、サードパーティ開発者のために、多くのAPIが開放されています。

Q&A

解決済

1回答

6138閲覧

swiftでcsvファイルを読み込んでテキストフィールドに貼り付ける方法

Tomzy

総合スコア104

Xcode

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

Swift

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

iOS 8

iOS 8(アイ・オーエス8)は、アップル社が2014年9月に発表したオペレーティングシステムです。iPhone 4sより対応しています。デザイン性の変更はなく、アプリや各種機能が強化されています。また、サードパーティ開発者のために、多くのAPIが開放されています。

0グッド

0クリップ

投稿2017/06/25 14:27

編集2017/06/25 14:31

本に書いてある方法が自分のやりたいことに大体合っているので、そのコードをお借りしたのですが、どうしてもエラーがでて前に進みません。エラーは

fatal error: unexpectedly found nil while unwrapping an Optional value>です。

なお、本はSwift3ではないのですが、Swift3に修正したコードをダウンロードして試すと正常に動作します。さらに、本の不要な部分はコードをCommentOutしても正常に動作するので、導入の仕方は間違っていないと思います。

ストーリーボードで設定したラベル、テキストフィールド、ボタンはいずれもコードと結びついています。

よろしくご指導ください。

第1画面のコードは下記のとおりでアプリを起動するとcsvファイルの通り表示されます。

// ViewController.swift // Mondai01 // // import UIKit class ViewController: UIViewController { @IBOutlet weak var logoImageView: UIImageView! @IBOutlet weak var titleLabel: UILabel! @IBOutlet weak var bodyTextView: UITextView! @IBOutlet weak var startButton: UIButton! override func viewDidLoad() { super.viewDidLoad() //CSVファイル名を引数にしてloadCSVメソッドを使用し、CSVファイルを読み込む let csvArray = loadCSV("Start") //logoImageViewに画像を設定 logoImageView.image = UIImage(named: csvArray[0]) //titleLabelにアプリ名を設定 titleLabel.text = csvArray[1] //bodyTextViewにアプリ説明文を設定 bodyTextView.text = csvArray[2] //ボタンの文字を白色に変更 startButton.setTitleColor(UIColor.red, for: .normal) //creditLabelにクレジットを設定 } //CSVファイル読み込みメソッド。引数でファイル名を取得。戻り値はString型の配列。 func loadCSV(_ fileName :String) -> [String]{ //CSVファイルのデータを格納するStrig型配列 var csvArray:[String] = [] //引数filnameからCSVファイルのパスを設定 let csvBundle = Bundle.main.path(forResource: fileName, ofType: "csv")! do { //csvBundleからファイルを読み込み、エンコーディングしてcsvDataに格納 let csvData = try String(contentsOfFile: csvBundle,encoding: String.Encoding.utf8) //改行コードが"\r"の場合は"\n"に置換する let lineChange = csvData.replacingOccurrences(of: "\r", with: "\n") //"\n"の改行コードで要素を切り分け、配列csvArrayに格納する csvArray = lineChange.components(separatedBy: "\n") }catch{ print("エラー") } return csvArray //戻り値の配列csvArray } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }

第2画面は次のコードです。

// MondaiViewController.swift // Mondai01 // // import UIKit class MondaiViewController: UIViewController{ @IBOutlet weak var mondaiNumberLabel: UILabel! @IBOutlet weak var mondaiTextView: UITextView! @IBOutlet weak var kaitouTextView: UITextView! //kentei.csvファイルを格納する配列csvArray var csvArray:[String] = [] //csvArrayから取り出した問題を格納する配列mondaiArray var mondaiArray:[String] = [] var mondaiCount = 0 //問題をカウントする変数 var correctCount = 0 //正解をカウントする変数 let total = 10 //出題数を管理する変数 override func viewDidLoad() { super.viewDidLoad() let viewController = ViewController() //loadCSVメソッドを使用し、csvArrayに検定問題を格納 csvArray = viewController.loadCSV("OnseiTextCSV") //シャッフルメソッドを使用し、検定問題を並び替えてcsvArrayに格納 //csvArray = mondaiShuffle() //csvArrayの0行目を取り出し、カンマを区切りとしてmondaiArrayに格納 mondaiArray = csvArray[mondaiCount].components(separatedBy: ",") //変数mondaiCountに1を足して、ラベルに出題数を設定 mondaiNumberLabel.text = "第\(mondaiCount+1)問" //TextViewに問題を設定 mondaiTextView.text = mondaiArray[0] //選択肢ボタンのタイトルに選択肢を設定 } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }

ビルドはできます。
エラーは正常に表示されている第1画面のスタートボタンを押すと発生します。そして上記のViewController.swiftでエラーマークがでます。そのエラースクリーンショットは次の画像の通りです。

イメージ説明

csv fileはXcode上で2つ作成しました。
Start.csv
top_image.png
「スマホの勉強」クイズを始めます
スタートボタンに触ると・・・。終わったら下の完了ボタンを押してください。

OnseiTextCSV.csv
勉強を始めましょう,
初めての漢字変換はできましたか,
音声認識はどんな感じでしたか,
このアプリには用語の解説も載っています,
タブレットには電話機能はついていません,
アイコンとはアプリを現すボタンのことです,
ホームボタンとは画面の下にあるボタンです,
パスワードとは鍵と考えて大切に保管しましょう,
ログインとは登録画面に入ることです,

ご参考事項
開発環境は下記のとおりです。
MacBookPro
OS-X10.12.4 Sierra
Xcode 8.3.2 (8E2002)
参照した本は 世界一受けたい iPhoneアプリ開発の授業 Chapter7-2
四択検定アプリを作ろう

私がやりたいことは
スタートボタンを押したら
第1問
質問 XXXXXXXX
と第2画面に質問が表示される。
これが今回の質問です。

ストーリーボードのスクリーンショットは下記のとおりです。
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

そこでエラーが出るということは指定のファイル名でcsvが見つけられないという原因の可能性が高いですね。

追加したファイルの名前はプログラムで指定している通りの「OnseiTextCSV.csv」になっていますか?大文字小文字も含めてファイル名のタイプミスがないかチェックしてみてください。

またファイルがちゃんとimportできていない可能性もあるので、一度ファイルを削除してもう一回Xcodeにファイルをimportし直してみてもいいかもしれません。

投稿2017/06/25 15:10

jollyjoester

総合スコア1585

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

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

Tomzy

2017/06/25 15:17

コメントを書きましたが載りません。解決しました。sが抜けていました。お恥ずかしいです。 ありがとうございました。
jollyjoester

2017/06/25 15:18

いえいえ解決されたようでよかったです^^/
Tomzy

2017/06/25 15:35

Swift愛好会会長様 大御所に教えて頂き光栄でありますが、恐縮しています。 単なるミススペルは恥ずかしいですが、これで数時間を使っていろいろなことを体験しました。これで身についていけば良いなーって思っています。 先日の愛好会は私には大分程度が高かったですが、メンターさんに支えられて必死でコピーペーストしました。実機で映像がでたときは感動ものでした。今後ともよろしくお願いします。
jollyjoester

2017/06/29 20:43

はい!よろしくお願いします! (スペルミスは私も未だにやってしまいます^^;;;慣れると自分でもすぐ発見できるようになるので訓練あるのみです!)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問