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

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

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

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

Swift

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

Q&A

解決済

1回答

448閲覧

fatal error: unexpectedly found nil while unwrapping an Optional valueを解決したい

shisen-t

総合スコア21

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/05/30 05:00

編集2019/05/31 00:25

コードで背景を設定した後、Storyboard上のUIButtonが隠れないように前面に持って行こうとしています。

こちらを参考に進めているのですが、ビルドし該当するページに入ろうとすると
self.view.bringSubviewToFront(btn)
のところで
fatal error: unexpectedly found nil while unwrapping an Optional value
が出てしまいます。

self.view.bringSubviewToFront(btn)
の部分を記述せずにビルドを行うと背景画像が設定され正常に動作する状態です。

Swift

1import UIKit 2 3class HomeViewController: UIViewController { 4 5 @IBOutlet weak var btn: UIButton! 6 7 var image: UIImage = UIImage(named: "IMG_6599.png")! 8 var ImageView: UIImageView = UIImageView(frame: CGRect(x: 0,y: 0,width: 750,height: 1334)) 9 10 override func viewDidLoad() { 11 super.viewDidLoad() 12 13 self.title = "home" 14 15 self.view.backgroundColor = UIColor.cyan 16 17 ImageView.image = image 18 ImageView.layer.position = CGPoint(x: self.view.bounds.width / 2,y: self.view.bounds.height / 2) 19 20 21 self.view.addSubview(ImageView) 22 23 self.view.bringSubviewToFront(btn) 24 self.view.sendSubviewToBack(ImageView) 25 } 26 27 28 }

現在のOutlet接続はこのようになっております。
イメージ説明
イメージ説明

また、Storyboard上の部品はこのようになっております。
イメージ説明

遷移前のViewControlerでは下記のように記述しております。

Swift

1 // ボタンを用意 2 var addBtn: UIBarButtonItem! 3 4 override func viewDidLoad() { 5 super.viewDidLoad() 6 7 // タイトルを付ける 8 self.title = "chat" 9 10 // addBtnを設置 11 addBtn = UIBarButtonItem(barButtonSystemItem: .reply, target: self, action: #selector(onClick(_:))) 12 self.navigationItem.leftBarButtonItem = addBtn 13} 14 15 // addBtnをタップしたときのアクション 16 @objc func onClick(_ sender: UIBarButtonItem) { 17 print("ボタンタップ") 18 let home = HomeViewController() 19 self.navigationController?.pushViewController(home, animated: true) 20 }

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

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

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

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

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

fuzzball

2019/05/30 05:17

btnのアウトレットは繋がっていますか? print(btn) が nil なら繋がっていないので繋いで下さい。
shisen-t

2019/05/30 05:19

StorybordとのOutlet接続がされていることは確認しました。
fuzzball

2019/05/30 05:20

print(btn) で確認して下さい。
shisen-t

2019/05/30 05:31

ページを開くときにnilが出てしまっているので接続されてないようです。 接続の方法を教えていただけないでしょうか。
fuzzball

2019/05/30 06:16

btn の Connections inspector を確認して下さい。
shisen-t

2019/05/30 06:42 編集

質問を編集しConnections inspectorの画像を追加したので、確認していただくことは可能でしょうか。
fuzzball

2019/05/30 06:54

Storyboard上の btn ってUILabelじゃないですか?
shisen-t

2019/05/30 06:56

確認したところUIButtonでした
fuzzball

2019/05/30 06:58

UIButtonであることを確認できるスクショを追加して下さい。
shisen-t

2019/05/30 07:11

画像追加したので、確認していただけますか。
fuzzball

2019/05/30 07:33

ごめんなさい、分からないです。
shisen-t

2019/05/30 07:37

もう少し時間をかけて解決方法を探ってみます。 お時間いただきありがとうございました。
xenbeat

2019/05/30 18:22

> ページを開くときにnilが出てしまっている 別画面から遷移しているのでしょうか。それに該当するコードがあれば質問本文追記ください。
xenbeat

2019/05/31 02:42

解決の糸口になってよかったです @fuzzballさん さすがです! @shisen-tさん アウトレットがうまく接続出来ていない場合も、同様のエラーが発生するので覚えておくとよろしいかと思います。(原因はほぼ二択です)
guest

回答1

0

自己解決

Swift

1 // addBtnをタップしたときのアクション 2 @objc func onClick(_ sender: UIBarButtonItem) { 3 print("ボタンタップ") 4 let storyboard = UIStoryboard(name: "Main", bundle: nil) 5 let nextView = storyboard.instantiateViewController(withIdentifier: "home") 6 let navi = UINavigationController(rootViewController: nextView) 7 present(navi, animated: true, completion: nil) 8 }

と書き換えることで解決しました。
きちんとStoryboardから生成しなくてはならないことを見落としていました。

fuzzballさん、xenbeatさんありがとうございました。

投稿2019/05/31 01:28

shisen-t

総合スコア21

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問