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

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

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

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

Q&A

解決済

1回答

868閲覧

スライドショーの止め方についてです。

tomichi

総合スコア16

Swift

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

0グッド

0クリップ

投稿2020/05/28 04:47

編集2020/06/02 02:58

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
スライドショーアプリを作っています。以下のコードのstartStopというボタンを一回押すとスライドショーが始まり、二回押すと止まるようになるのが理想です。しかし、一回押すとスライドショーが始まるのですが二回目を押すとエラーが出てしまいます。これはなぜでしょうか?

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

エラーメッセージ

startStopを2回目に押した時に最後のself.timer.invalidate()にThread 1: Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value
このエラーが出てしまいます。

該当のソースコード

ソースコード

import

1 2class ViewController: UIViewController { 3 @IBOutlet weak var UIImageView: UIImageView! 4 5 var imageIndex = 0 6 7 var tapCount = 1 8 9 var timer: Timer! 10 11 let images = [UIImage(named: "umi1.jpeg"),UIImage(named: "umi2.jpeg"),UIImage(named: "umi3.jpeg")] 12 13 override func viewDidLoad() { 14 super.viewDidLoad() 15 // Do any additional setup after loading the view. 16 let imageView = images[0] 17 18 UIImageView.image = imageView 19 } 20 override func didReceiveMemoryWarning(){ 21 super.didReceiveMemoryWarning() 22 } 23 @IBAction func backImage(_ sender: Any) { 24 if imageIndex == 0{ 25 imageIndex = 2 26 }else{ 27 imageIndex -= 1 28 } 29 UIImageView.image = images[imageIndex] 30 } 31 @IBAction func nextImage(_ sender: Any) { 32 if imageIndex == 2{ 33 imageIndex = 0 34 }else{ 35 imageIndex += 1 36 } 37 UIImageView.image = images[imageIndex] 38 } 39 @objc func onTimer(_ timer: Timer){ 40 if imageIndex == 2{ 41 imageIndex = 0 42 }else{ 43 imageIndex += 1 44 } 45 UIImageView.image = images[imageIndex] 46 } 47 @IBAction func startStop(_ sender: Any) { 48 49 tapCount += 1 50 51 if tapCount % 2 == 0{ 52 Timer.scheduledTimer(timeInterval: 2,target: self,selector: #selector(onTimer(_:)),userInfo: nil, repeats: true) 53 54 55 }else{ 56 self.timer.invalidate() 57 58 } 59 60 61 62} 63}### 試したこと 64 65ここに問題に対して試したことを記載してください。 66 67### 補足情報(FW/ツールのバージョンなど) 68 69ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

self.timer にはなにも代入されてませんね

#どこかの課題でしょうか。似たような質問ありましたね

投稿2020/05/28 05:00

y_waiwai

総合スコア88042

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

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

tomichi

2020/05/28 05:16

回答ありがとうございます。 その点も含めて考えてみます!
tomichi

2020/05/28 06:38

回答をヒントに色々試したところ、Timer.scheduledTimer(〜)の頭にself.timer=と付け加えたら正確に作動しました! self.timerにTimer.scheduledTimerを代入すれば良かったのですね。 ありがとうございました(⌒▽⌒)
y_waiwai

2020/05/28 06:41

すばらしい。 がんばってください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問