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

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

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

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

Swift

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

Q&A

2回答

2308閲覧

fatal errorの解決方法

kackey621

総合スコア18

Xcode

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

Swift

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

0グッド

0クリップ

投稿2017/04/07 07:03

このコードのビルドをしましたがエラーが出ました。
エラーは、
fatal error: unexpectedly found nil while unwrapping an Optional value
でした。
エラーが出ている位置は、

Swift

1// 基準日時の設定 3分を日付型に変換 2let dt:Date = df.date(from: lbTimer.text!)! 3

全文コードは下記の通りです。

Swift

1@IBAction func countDown(_ sender: UIButton) { 2 3 // 背景色 4 self.view.backgroundColor = UIColor.yellow 5 6 // タイマー生成、開始 1秒後の実行 7 let tmr: Timer! = Timer.scheduledTimer( 8 timeInterval: 1.0, // 時間間隔 9 target: self, // タイマーの実際の処理の場所 10 selector: #selector(TimerViewController.tickTimer(_:)), // メソッド タイマーの実際の処理 11 userInfo: nil, 12 repeats: true) // 繰り返し 13 tmr.fire() 14 } 15 16 // タイマー処理 17 func tickTimer(_ timer: Timer) { 18 19 //NSLog(@"タイマー表示"); 20 21 // 時間書式の設定 22 let df:DateFormatter = DateFormatter() 23 df.dateFormat = "mm:ss" 24 25 // 基準日時の設定 3分を日付型に変換 26 let dt:Date = df.date(from: lbTimer.text!)! 27 28 // カウントダウン 29 let dt02 = Date(timeInterval: -1.0, since: dt) 30 31 self.lbTimer.text = df.string(from: dt02) 32 33 // 終了判定 3分が00:00になったら isEqualToString:文字の比較 34 if self.lbTimer.text == "00:00" { 35 36 // バックアップ背景色の変更 37 self.view.backgroundColor = UIColor.red 38 39 // タイマー停止 40 timer.invalidate() 41 42 // カスタマイズ編:ダイアログを作成 43 let alertController = UIAlertController(title: "終了", message: "タイマー終了時間です", preferredStyle: .alert) 44 // ダイアログに表示させるOKボタンを作成 45 let defaultAction = UIAlertAction(title: "OK", style: .default, handler: nil) 46 // アクションを追加 47 alertController.addAction(defaultAction) 48 // ダイアログの表示 49 present(alertController, animated: true, completion: nil) 50 51 } 52 } 53

使用しているSwiftは3です。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

3分間タイマーを実行したい場合、テキストフィールドに3:00とちゃんと入力すれば実行できます。

しかしテキストフィールドにコチラの意図したフォーマットで入力しないと落ちてしまうので、以下のサイトを参考にタイマーのピッカーを使用するのが良いと思います。

【Swift】Date Pickerの使い方。ホイールを回して時刻や日付を設定する。

投稿2017/04/07 14:26

_Kentarou

総合スコア8490

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

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

0

エラーの内容が「found nil while unwrapping an Optional value 」なのですから、 lbTimer.textが持つ値が不適切なのだと思われます。

lbTimer.text の値を表示してみて、
df.dateFormat = "mm:ss" という表示形式(23分45秒だとすると、"23:45"のように表現する)になっているかどうか確認してみては如何でしょうか?

投稿2017/04/07 07:15

coco_bauer

総合スコア6915

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

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

kackey621

2017/04/07 07:33

すみません、 if self.lbTimer.text == "00:00"  の形で良いでしょうか?この状態でもエラーが出ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問