前提・実現したいこと
ここに質問の内容を詳しく書いてください。
スライドショーアプリを作っています。以下のコードの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ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/28 05:16
2020/05/28 06:38
2020/05/28 06:41