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

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

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

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Xcode

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

Swift

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

Q&A

0回答

1168閲覧

コードのみからストーリーボードを絡めた開発に移行するとエラーが出てしまう

noblehorse

総合スコア6

TableView

TableView(UITableView)とは、リスト形式で表示するコントロールで、ほとんどのアプリに使用されています。画面を「行」に分けて管理し、一般的には各行をタップした際に詳細画面に移動します。

Twitter

Twitterは、140文字以内の「ツイート」と呼ばれる短文を投稿できるサービスです。Twitter上のほぼ全ての機能に対応するAPIが存在し、その関連サービスが多く公開されています。

Xcode

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

Swift

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

0グッド

0クリップ

投稿2018/09/25 09:44

編集2018/09/28 06:47

前提・実現したいこと

初心者ながらswiftで簡易的なSNSを開発したいと思っています。
はじめからSNSを開発できるとは思えないので1つ1つ機能を作り、それを積み重ねていき、最終的にSNSを作れればと思っています。
その過程でInstagramやツイッターなどにある検索バーを作っています。
検索バーの機能を実装中に以下のエラーメッセージが発生しました。

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

Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value

###ストーリーボードのUI部品の配置

イメージ説明

イメージ説明

ソースコード

swift

1import UIKit 2 3class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate { 4 5 @IBOutlet weak var searchBar: UISearchBar! 6 @IBOutlet weak var tableView: UITableView! 7 8 9 10 //検索データ 11 let kensaku:[String] = [] 12 13 var searchResults:[String] = [] 14 15 16 override func viewDidLoad() { 17 super.viewDidLoad() 18 19 20 //tableViewのカスタマイズ 21 22 view = UIView() 23 let barHeight: CGFloat = UIApplication.shared.statusBarFrame.size.height 24 tableView = UITableView(frame: CGRect(x: 0, y: barHeight, width: self.view.frame.width, height: self.view.frame.height)) 25 tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") 26 tableView.dataSource = self 27 tableView.delegate = self 28 self.view.addSubview(tableView) 29 //このテーブルビューのコード上のどこかで必ずエラーが発生 30 31 32 //searchBarのカスタマイズ 33 searchBar = UISearchBar() 34 searchBar.delegate = self 35 searchBar.frame = CGRect(x:0, y:0, width:self.view.frame.width, height:42) 36 searchBar.layer.position = CGPoint(x: self.view.bounds.width/2, y: 89) 37 searchBar.searchBarStyle = UISearchBarStyle.default 38 searchBar.showsSearchResultsButton = false 39 searchBar.placeholder = "検索" 40 searchBar.setValue("キャンセル", forKey: "_cancelButtonText") 41 searchBar.tintColor = UIColor.red 42 43 tableView.tableHeaderView = searchBar 44 } 45 46 override func didReceiveMemoryWarning() { 47 super.didReceiveMemoryWarning() 48 } 49 50 //データの個数を返すメソッド 51 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 52 if searchBar.text != "" { 53 return searchResults.count 54 } else { 55 return kensaku.count 56 } 57 } 58 //tableViewCellの作成&検索結果表示 59 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 60 let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath as IndexPath) 61 if searchBar.text != "" { 62 cell.textLabel!.text = "(searchResults[indexPath.row])" 63 } else { 64 cell.textLabel!.text = "(kensaku[indexPath.row])" 65 } 66 67 return cell 68 } 69 70 // 検索ボタンが押された時に呼ばれる 71 func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 72 self.view.endEditing(true) 73 searchBar.showsCancelButton = true 74 self.searchResults = kensaku.filter{ 75 // 大文字と小文字を区別せずに検索 76 $0.lowercased().contains(searchBar.text!.lowercased()) 77 } 78 self.tableView.reloadData() 79 } 80 81 // キャンセルボタンが押された時に呼ばれる 82 func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { 83 searchBar.showsCancelButton = false 84 self.view.endEditing(true) 85 searchBar.text = "" 86 self.tableView.reloadData() 87 } 88 89 // テキストフィールド入力開始前に呼ばれる 90 func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool { 91 searchBar.showsCancelButton = true 92 return true 93 } 94}

エラーをなくすために試したこと

1、エラー部分のコードを消す

・エラー部分のコードを消しても違う部分にエラーが出てしまい、その繰り返しになってしまいました。

2、以前ストーリーボード上にViewを生成しておらず、self.viewの部分がアンラップに失敗しているというご指摘をいただき、ストーリーボード上にViewを追加させていただきました。

・エラー箇所は変わりましたが、以前上記のエラーが解消されることはありませんでした。

補足情報

元々はコードを主体として開発を行っていたのですが視覚的に見やすくしたいと思い、
コードのみでのシミュレーター実装ができる状態に仕上げてからストーリーボードを使い、
UI部品を接続し、接続時のコードと被っているコードを消していくという作業をしていった際にどこかでNilが発生してしまったのだと思います。

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

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

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

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

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

fuzzball

2018/09/27 05:17

どこでエラーが出ているのでしょうか?
fuzzball

2018/09/27 05:19

「ストーリーボード上にViewを追加」というのはどういうことでしょうか?ViewControllerには最初からviewが乗っているはずですが。
noblehorse

2018/09/27 06:16

ソースコード内で書かせていただきましたテーブルビューのコード上でエラーが出てしまいます。現在エラー表示が出ているのは tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")という部分です。
fuzzball

2018/09/27 06:16

「エラーをなくすために試したこと」の1番に書かれていることは全て見当違いなので削除して下さい。見た人が混乱します。
fuzzball

2018/09/27 06:21 編集

14:19への返信と、15:16への対応をお願いします。
noblehorse

2018/09/27 06:23

self.viewにあたるViewが生成されておらずViewControllewで作られたViewはNillであるという指摘を頂いたので単純にViewを追加させて頂いた次第です。これも間違った対処法でしたらすみません。
noblehorse

2018/09/27 06:26

ご指摘ありがとうございます!編集させていただきました!
fuzzball

2018/09/27 06:29

その指摘は「storyboardなどから生成される場合以外はviewは自動では生成されません」と書かれていますが。Storyboardを使っているのですから自分で生成/追加する必要はありません。
fuzzball

2018/09/27 06:30

で、tableViewのアウトレットが繋がっていないのではないでしょうか?
noblehorse

2018/09/27 06:35

なるほど!では追加したviewは削除しておきます!アウトレット接続は確認しましたが繋がっていました!
fuzzball

2018/09/27 06:46

エラーの出る行の上にprint(tableView)を追加して出力を教えて下さい。
noblehorse

2018/09/27 06:52

大変恐縮ですが出力とはどういったものでしょうか?表示される部分を教えていただけますでしょうか?
fuzzball

2018/09/27 06:54

Consoleへの出力です。
noblehorse

2018/09/27 07:07

左右に表示されるどちらかわからなかったのでどちらも乗せておきます。左 self kantankensaku.ViewController 0x00007fcb48510810 と barHeight CGFloat 20 。右 (lldb) と表示されました!
fuzzball

2018/09/27 07:11

右側がConsoleです。それはprint(tableView)の出力ではありません。識別できるように print("[tableView]", tableView) に変更して試して下さい。行頭に [tableView] と表示されている行をコピペして下さい。
noblehorse

2018/09/27 07:19

変更するとValue of type 'String' has no member 'tableView'このようなエラーが出てしまい確認することができませんでした。
fuzzball

2018/09/27 07:41

タイプミスではないですか?コピペして下さい。
noblehorse

2018/09/28 06:23

お返事遅れて申し訳ありません!できました!Message from debugger: Terminated due to signal 9と出力されました!
fuzzball

2018/09/28 06:30

「行頭に [tableView] と表示されている行をコピペして下さい」とお願いしましたが。
noblehorse

2018/09/28 06:52

上のストーリーボードのUI部品の配置写真の下に追加して入力時の画像を掲載させて頂いたのですが、出力されたのは一行だけでテーブルビューの行がなかったのですが何か間違っている点がありますでしょうか?
fuzzball

2018/09/28 06:54

print文を追加しなければそのメッセージは表示されないのでしょうか?
noblehorse

2018/09/28 06:59

追加前後でメッセージは変わらず同じものが表示されています
fuzzball

2018/09/28 07:03 編集

元々のエラーメッセージと変わっていますよね?どの段階で変わったのでしょうか?print文が表示されていないということは、そこに来る前に止まっているということなのですが。
noblehorse

2018/09/28 07:12

シミュレーターで実装して見たらテーブルビューの行が出力されました![tableView] some(<UITableView: 0x7fe75903e600; frame = (0 20; 375 647); clipsToBounds = YES; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x604000255e70>; layer = <CALayer: 0x60000022b400>; contentOffset: {0, 0}; contentSize: {375, 691}; adjustedContentInset: {0, 0, 0, 0}>) これが出ました
fuzzball

2018/09/28 07:13

その後で「Unexpectedly found nil while unwrapping an Optional value」で落ちるのでしょうか?
noblehorse

2018/09/28 07:17

はい!落ちてそのエラーが出てしまいます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問