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

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

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

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

Q&A

解決済

1回答

1090閲覧

Swiftでタブ遷移時になぜかUnexpectedly found nil while unwrapping〜が出てしまう

momonoki

総合スコア21

Swift

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

0グッド

0クリップ

投稿2018/09/21 07:27

前提・実現したいこと

storyboardで二つの画面を作っています。
一つは、普通の入力画面、もう一つはテーブルビューを使ったリストの画面です。
二つの画面の切り替えは、画面下部にあるタブで行っています。

今回、一つ目のタブから二つ目のタブに切り替えた時に、
一つ目のタブのTextFieldに対して、Unexpectedly found nil while unwrapping optional valueのエラーが発生しました。

発生している問題・エラーメッセージ

Unexpectedly found nil while unwrapping optional value

該当のソースコード

swift

1// 2// ViewController.swift 3// testApplication 4// 5// Created by on 2018/09/17. 6// Copyright © 2018年 All rights reserved. 7// 8 9import UIKit 10 11class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 12 13 let itemes = ["Sleepy", "Sneezy", "Bashful", "Happy", 14 "Doc", "Grumpy", "Dopey", "Thorin", "Dorin", 15 "Nori", "Ori","Balin", "Dwalin", "Fili", "Kili", 16 "Oin", "Gloin", "Bifur", "Bofur", "Bombur" 17 ] 18 19 20 @IBOutlet weak var simpleTableView: UITableView! 21 @IBOutlet weak var a: UITextField! 22 @IBOutlet weak var b: UITextField! 23 @IBOutlet weak var c: UITextField! 24 @IBOutlet weak var d: UITextField! 25 @IBOutlet weak var e: UITextField! 26 27 @IBOutlet weak var f: UILabel! 28 @IBOutlet weak var g: UILabel! 29 @IBOutlet weak var h: UILabel! 30 31 var timing = 0 32 33 @IBAction func Kirikae(_ sender: UISegmentedControl) { 34 switch sender.selectedSegmentIndex{ 35 //月次 36 case 0: 37 timing = 0 38 //年次 39 case 1: 40 timing = 1 41 default: 42 timing = 0 43 } 44 } 45 46 @IBAction func Keisan(_ sender: Any) { 47 let Ganpon = Double(a.text!) 48 let Nenri2 = Double(b.text!) 49 let Getsuji = Double(c.text!) 50 let cost = Double(d.text!) 51 let Nen = Double(e.text!) 52 53 let result1 = Ganpon! + (Getsuji! * Nen!) 54 55 var monthlyProfit:Double = 0 56 var baseAmount:Double = Ganpon! 57 var result2:Double = 0 58 var thisYear:Double = 0 59 var taxAmount:Double = 0 60 var taxThisYear:Double = 0 61 62 //非課税の場合 63 if cost == 0 { 64 //年利_月次繰り入れ_切り捨て_期初繰り入れ 65 if timing == 0 { 66 //期間分ループ 67 for _ in 0..<Int(Nen!) { 68 //月利計算用の基礎金額を算出 69 baseAmount = (baseAmount + Getsuji!) + monthlyProfit 70 //月利を計算 71 monthlyProfit = floor(baseAmount * (Nenri2! / 12)) 72 //月利を総資産に組み込む 73 result2 += monthlyProfit 74 } 75 } 76 //年利_月次繰り入れ_切り捨て_期初繰り入れ 77 else if timing == 1 { 78 for i in 0..<Int(Nen!) { 79 //12ヶ月目に元本繰り入れを行う 80 if (i + 1) % 12 == 0 { 81 baseAmount = ((baseAmount + Getsuji!) + thisYear) 82 //今年度利益の初期化 83 thisYear = 0 84 //通常月は積み立てのみ 85 } else { 86 baseAmount = (baseAmount + Getsuji!) 87 } 88 //月次の利息計算 89 monthlyProfit = floor(baseAmount * (Nenri2! / 12)) 90 //今年度の運用益計算用 91 thisYear += monthlyProfit 92 //合計資産 93 result2 += monthlyProfit 94 } 95 } 96 } 97 //課税ありの場合 98 else { 99 //月次繰り入れ 100 if timing == 0 { 101 //期間分ループ 102 for _ in 0..<Int(Nen!) { 103 //月利計算用の基礎金額を算出 104 baseAmount = (baseAmount + Getsuji!) + monthlyProfit 105 //月利を計算 106 monthlyProfit = baseAmount * (Nenri2! / 12) 107 //税額を計算 108 taxAmount = monthlyProfit * cost! 109 monthlyProfit = floor(monthlyProfit - taxAmount) 110 //月利を総資産に組み込む 111 result2 += monthlyProfit 112 } 113 } 114 else if timing == 1 { 115 for i in 0..<Int(Nen!) { 116 //12ヶ月目に元本繰り入れを行う 117 if (i + 1) % 12 == 0 { 118 //元金繰り入れ 119 baseAmount = (baseAmount + Getsuji!) + thisYear 120 //通常月は積み立てのみ 121 } else { 122 baseAmount = (baseAmount + Getsuji!) 123 } 124 //月次の利息計算 125 monthlyProfit = floor(baseAmount * (Nenri2! / 12)) 126 127 if (i + 1) % 12 == 0 { 128 //今年度の運用益計算用 129 thisYear += monthlyProfit 130 //税額計算 131 taxThisYear = floor(thisYear * 0.05) 132 //合計資産 133 result2 += monthlyProfit - taxThisYear 134 //初期化 135 thisYear = 0 136 } else { 137 //今年度の運用益計算用 138 thisYear += monthlyProfit 139 //合計資産 140 result2 += monthlyProfit 141 } 142 } 143 } 144 } 145 146 result2 = result2 + result1 147 148 let result3 = result2 - result1 149 150 f.text = String(result1) 151 g.text = String(result2) 152 h.text = String(result3) 153 } 154 155 override func viewDidLoad() { 156 super.viewDidLoad() 157 // Do any additional setup after loading the view, typically from a nib. 158 a.text = "1000000" 159 b.text = "0.05" 160 c.text = "10000" 161 d.text = "0" 162 e.text = "12" 163 f.text = "" 164 g.text = "" 165 h.text = "" 166 self.a.keyboardType = UIKeyboardType.numberPad 167 self.b.keyboardType = UIKeyboardType.numberPad 168 self.c.keyboardType = UIKeyboardType.numberPad 169 self.d.keyboardType = UIKeyboardType.numberPad 170 self.e.keyboardType = UIKeyboardType.numberPad 171 } 172 173 override func didReceiveMemoryWarning() { 174 super.didReceiveMemoryWarning() 175 // Dispose of any resources that can be recreated. 176 } 177 178 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 179 return itemes.count 180 } 181 182 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 183 let cell = UITableViewCell(style: UITableViewCellStyle.subtitle,reuseIdentifier: "cell") 184 cell.textLabel?.text = itemes[indexPath.row] 185 return cell 186 } 187 188}

上記ソース中、タブを切り替えると、viewDidLoad内のa.textでnilのエラーが発生します。
1つ目のタブではそのようなエラーが発生しません。
ちゃんと変数に入れた値をもとに計算を行なってくれるので、nilになるのはおかしいと思っています。

補足情報(FW/ツールのバージョンなど)

swift4.1.2

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

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

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

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

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

fuzzball

2018/09/21 07:40

「もう一つはテーブルビューを使ったリストの画面」と書かれているので、このコードは二つ目のタブのViewControllerということでしょうか?
momonoki

2018/09/21 07:55

ViewControllerは一つだけです。二つのタブで一つのViewControllerを使っているのですが分けた方がいいのでしょうか?
guest

回答1

0

ベストアンサー

ViewControllerは一つだけです。二つのタブで一つのViewControllerを使っているのですが分けた方がいいのでしょうか?

何をしているのか理解してそうしているのであればかまわないのですが、理解出来ていないようなので分けた方がいいと思います。

理解出来ていれば今回のようなエラーにはなりません。

投稿2018/09/21 08:32

fuzzball

総合スコア16731

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

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

momonoki

2018/09/21 08:44

承知しました。 とりあえず分けてやってみようと思います。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問