> 問題を修正しました。
「世界一受けたい iPhoneアプリ開発の授業 Chapter7-2
四択検定アプリを作ろう」を参考にしてcsvファイルを読み込み第2問を表示するところまでは行ったのですが、第2問は瞬間で消えて第1問に表示が戻ってしまいます。
設問と回答方法が本のサンプルとは異なりますので、流用したコードは一部分のみです。
本のコード(ウェブサイトより最新をダウンロード)と自分のコードを何度も見比べたのですが、どうしても原因が分かりません。
ご教示頂ければ幸いです。コードとスクリーンショットは下記のとおりです。
最初に質問した時は次のステップ分まで入っていました。そこで、「編集」でその部分を修正しました。
私のコード
MondaiViewController.swift
1// Mondai01 2// 3 4import UIKit 5 6 class MondaiViewController: UIViewController, UITextFieldDelegate { 7 8 //音声問題.csvファイルを格納する配列csvArray 9 @IBOutlet weak var mondaiNumberLabel: UILabel! 10 @IBOutlet weak var mondaiField: UITextField! 11 @IBOutlet weak var kaitouField: UITextField! 12 @IBOutlet weak var judgeImageView: UIImageView! 13 @IBOutlet weak var answerBtn: UIButton! 14 15 //"OnseiTextsCSV"ファイルを格納する配列csvArray 16 var csvArray:[String] = [] 17 //csvArrayから取り出した問題を格納する配列mondaiArray 18 var mondaiArray:[String] = [] 19 20 var mondaiCount = 0 //問題をカウントする変数 21 var correctCount = 0 //正解をカウントする変数 22 // let total = 10 //出題数を管理する変数 23 var nextBtn = UIButton() 24 25 override func viewDidLoad() { 26 super.viewDidLoad() 27 28 print ("ここまで来たaaa") 29 30 let viewController = ViewController() 31 32 //loadCSVメソッドを使用し、csvArrayに検定問題を格納 33 csvArray = viewController.loadCSV("OnseiTextsCSV") 34 35 36 //csvArrayの0行目を取り出し、カンマを区切りとしてmondaiArrayに格納 37 mondaiArray = csvArray[mondaiCount].components(separatedBy: ",") 38 39 //変数mondaiCountに1を足して、ラベルに出題数を設定 40 mondaiNumberLabel.text = "第\(mondaiCount+1)問" 41 //TextViewに問題を設定 42 mondaiField.text = mondaiArray[0] 43 44 45 //テキストビューに自動でキーボード表示 46 kaitouField.becomeFirstResponder() 47 48 // Delegate を設定 49 kaitouField.delegate = self 50 51 // プレースホルダー 52 kaitouField.placeholder = "マイクで問題を読む" 53 54 } 55 56//回答ボタンをタップした時の回答正誤の判定と○X表示 57 58 @IBAction func btnAction(_ sender: UIButton) { 59 60 print ("ここまで来たaaa222") 61 if mondaiField.text == kaitouField.text { 62 63 //○を表示 64 judgeImageView.image = UIImage(named: "maru.png") 65 print ("ここまで来たbbb") 66 //回答ボタンの使用停止 67 answerBtn.isEnabled = false 68 69 //正解カウントを増やす 70 correctCount += 1 71 }else{ 72 //間違っていたら×を表示 73 print ("ここまで来たccc") 74 judgeImageView.image = UIImage(named: "batsu.png") 75 76 //回答ボタンの使用停止 77 answerBtn.isEnabled = false 78 } 79 } 80 81 func btn02Action(_ sender: UIButton) { 82 83 84 func nextQuestion(){ 85 86 //問題カウント変数をカウントアップ 87 mondaiCount += 1 88 //mondaiArrayに格納されている問題配列を削除 89 mondaiArray.removeAll() 90 //csvArrayから次の問題配列をmondaiArrayに格納 91 mondaiArray = csvArray[mondaiCount+1].components(separatedBy: ",") 92 93 //問題数ラベル、問題表示TextView、選択肢ボタンに文字をセット 94 mondaiNumberLabel.text = "第\(mondaiCount+1)問" 95 mondaiField.text = mondaiArray[0] 96 97 print ("ここまで来たddd") 98 99//// 前回の質問に入っていた次のステップに進むためのif文ですので、CommentOutしました。 100 101 //if-else文を追加。mondaiCountがtotalに達したら画面遷移 102// if mondaiCount == total { 103// 104// //Stroyboard SegueのIdentifierを引数に設定して画面遷移 105// performSegue(withIdentifier: "score", sender: nil) 106 107// } 108// 109 110 //else{ 111 112 print ("ここまで来たeee") 113 } 114 115 //正誤表示画像を隠す 116 judgeImageView.isHidden = true 117 //nextQuestionメソッドを呼び出す 118 nextQuestion() 119 120 print ("ここまで来たfff") 121 122 } 123 124 override func didReceiveMemoryWarning() { 125 super.didReceiveMemoryWarning() 126 // Dispose of any resources that can be recreated. 127 } 128}
ご参考事項
-
茶色のもどる ボタンは本のImageを使ったのでもどるになっていますが本来なら次のボタンです。func btn02Actionと結んでいます。
-
一度answerBtnを押し、次に戻るボタン、すなわちbtn02Actionを押した場合の現象は一瞬第2問の数字と問題が現れたあと消えて第1問と問題が現れます。一旦現れた判定の×マークは消えます、その時のprintの結果は下記のとおりです。
ここまで来た01
ここまで来た02
ここまで来た01
ここまで来たaaa
ここまで来た02
ここまで来た01
2017-07-09 00:56:10.916377+0900 Mondai01[79881:34645706] [MC] System group container for systemgroup.com.apple.configurationprofiles path is /Users/tomijisuzuki/Library/Developer/CoreSimulator/Devices/ systemgroup.com.apple.configurationprofiles
2017-07-09 00:56:10.916690+0900 Mondai01[79881:34645706] [MC] Reading from private effective user settings.
ここまで来たaaa222
ここまで来たccc
ここまで来たddd
ここまで来たeee
ここまで来たfff
ここまで来たaaa
ここまで来た02
ここまで来た01
3.もどるボタンを何度押しても一旦第2問が表示され、すぐに1問にもどります。
4.一旦 ここまで来たfff には到達するのですが、何故か元に戻りここまで来たaaa をプリントする原因を承知したいと思います。それがこの質問の主旨です。
5.開発環境は下記のとおりです。
MacBookPro
OS-X10.12.4 Sierra
Xcode 8.3.2 (8E2002)
回答1件
あなたの回答
tips
プレビュー