「世界一受けたい iPhoneアプリ開発の授業 Chapter7-2
四択検定アプリを作ろう」を参考にして問題に○ x イメージを付けるのは成功し次問にも移れたのですが、次問に移る時の正誤判定イメージが消えないので下記のコードを付け加えました。
judgeImageView.removeFromSuperview()
イメージは消えたのですが、次問に移るとエラーがでてアプリが落ち、fatal error: unexpectedly found nil while unwrapping an Optional valueと表示されます。この部分をCommentOutすると次問に移ることができ次問の正誤判定はします。但し前問の判定が残ります。
全コードを下記のとおり掲載しますので、その原因を教えてください。
問題箇所として//◎を2カ所付しました。
// MondaiViewController.swift
// Mondai01
//
// Created by
import UIKit
class MondaiViewController: UIViewController, UITextFieldDelegate {
//音声問題.csvファイルを格納する配列csvArray @IBOutlet weak var mondaiNumberLabel: UILabel! @IBOutlet weak var mondaiField: UITextField! @IBOutlet weak var kaitouField: UITextField! @IBOutlet weak var judgeImageView: UIImageView! @IBOutlet weak var answerBtn: UIButton! //"OnseiTextsCSV"ファイルを格納する配列csvArray var csvArray:[String] = [] //csvArrayから取り出した問題を格納する配列mondaiArray var mondaiArray:[String] = [] var mondaiCount = 0 //問題をカウントする変数 var correctCount = 0 //正解をカウントする変数 let total = 10 //出題数を管理する変数 var nextBtn = UIButton() override func viewDidLoad() { super.viewDidLoad() print ("ここまで来たaaa") let viewController = ViewController() //loadCSVメソッドを使用し、csvArrayに検定問題を格納 csvArray = viewController.loadCSV("OnseiTextsCSV") //csvArrayの0行目を取り出し、カンマを区切りとしてmondaiArrayに格納 mondaiArray = csvArray[mondaiCount].components(separatedBy: ",") //変数mondaiCountに1を足して、ラベルに出題数を設定 mondaiNumberLabel.text = "第\(mondaiCount+1)問" //TextViewに問題を設定 mondaiField.text = mondaiArray[0] //テキストビューに自動でキーボード表示 kaitouField.becomeFirstResponder() // Delegate を設定 kaitouField.delegate = self // プレースホルダー kaitouField.placeholder = "マイクで問題を読む" }
//回答ボタンをタップした時の回答正誤の判定と○X表示
@IBAction func btnAction(_ sender: UIButton) { print ("ここまで来たaaa222") if mondaiField.text == kaitouField.text { //○を表示 judgeImageView.image = UIImage(named: "maru.png") print ("ここまで来たbbb") //正解カウントを増やす correctCount += 1 }else{ //間違っていたら×を表示
//◎最初は表示されますが、次問になるとエラーになります。
print ("ここまで来たccc") judgeImageView.image = UIImage(named: "batsu.png") print ("ここまで来たccc2222") } //回答ボタンの使用停止 answerBtn.isEnabled = false } func btn02Action(_ sender: UIButton) { func nextQuestion(){ //問題カウント変数をカウントアップ mondaiCount += 1 //mondaiArrayに格納されている問題配列を削除 mondaiArray.removeAll() //csvArrayから次の問題配列をmondaiArrayに格納 mondaiArray = csvArray[mondaiCount].components(separatedBy: ",") //◎ここが追加したコード⇒ここをCommentOutすると次問の正誤判定はできます。 //次問のボタンを押しても前の正誤判定が消えないので回答イメージの表示を止める judgeImageView.removeFromSuperview() //問題数ラベル、問題表示TextView、選択肢ボタンに文字をセット mondaiNumberLabel.text = "第\(mondaiCount+1)問" mondaiField.text = mondaiArray[0] //回答ボタンの使用開始 answerBtn.isEnabled = true func btnAction(_ sender: UIButton) { print ("ここまで来たaaa333")
//
}
print ("ここまで来たddd")
//print ("ここまで来たddd-2")
// //if-else文を追加。mondaiCountがtotalに達したら画面遷移
if mondaiCount < total {
//csvArrayから次の問題配列をmondaiArrayに格納 mondaiArray = csvArray[mondaiCount].components(separatedBy: ",") //問題数ラベル、問題表示TextView、選択肢ボタンに文字をセット mondaiNumberLabel.text = "第\(mondaiCount+1)問" mondaiField.text = mondaiArray[0] } else{ //Stroyboard SegueのIdentifierを引数に設定して画面遷移 performSegue(withIdentifier: "score", sender: nil) print ("ここまで来たeee") } } judgeImageView.isHidden = false //nextQuestionメソッドを呼び出す nextQuestion() print ("ここまで来たfff") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. }
}
ご参考までに画像を添付します。 1問の正誤判定です ![イメージ説明](99dfeafac665361fc1df12f1d5138ceb.png) 2問に移りました1問の正誤判定は消えています ![イメージ説明](779b7bb2ede5079317fd37ca12acb0f5.png) 2問に回答を入れました。 ![イメージ説明](479d1776dff8d3738f9143c4c386fe03.png) ここで回答ボタンを押すとエラーになります。 画像の「もどる」は次問に移るボタンを意味します。 ストーリーボードとコードは結ばれています。 開発環境は下記のとおりです。 MacBookPro OS-X10.12.6 Sierra Xcode 8.3.3 (8E3004b) よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。