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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Swift

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

Q&A

解決済

1回答

1074閲覧

非同期通信でnilエラーが出てしまう。

bilieikbilibili

総合スコア37

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Swift

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

0グッド

0クリップ

投稿2018/06/06 16:29

編集2018/06/06 16:29

キーボードでタイプしたら検索予測を引っ張ってくる処理を書いています。
しかし、データを受け取るコードで下記のようなwnrappingエラーが出てしまいます。

swift

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

原因のコードは下記のコードですが、
素早くタイプしすぎるとエラーを吐くようです。
これを改善するためにはどうコードを変えていけば良いですか?

swift

1 2 /// 検索予測をDBから取得 3 func getDB(){ 4 5 /// パラメーターに送信情報を追加 6 let params = type_keyword /// タイプしたキーワード(1文字タイプするごとに) 7 8 /// POST送信 9 let urlString = "https://***" 10 let request = NSMutableURLRequest(url: URL(string: urlString)!) 11 request.httpMethod = "POST" 12 request.addValue("application/json", forHTTPHeaderField: "Content-Type") 13 do{ 14 request.httpBody = try JSONSerialization.data(withJSONObject: params, options: .prettyPrinted) 15 let task:URLSessionDataTask = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: {(data,response,error) -> Void in 16 let resultData = String(data: data!, encoding: .utf8)! ///ここでエラーが出る。 17 18 DispatchQueue.main.async{ 19 20 ///ここから検索予測を反映させるVIEWの処理 21 22 } 23 24 }) 25 task.resume() 26 }catch{ 27 print("Error:(error)") 28 } 29 30 } 31

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

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

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

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

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

guest

回答1

0

ベストアンサー

datanilだよ!というエラーなので、取得が成功(Unwrap)した時のみ値を使えば良いと思います。

その前にインクリメントサーチは入力中に絶えず送信してしまうので、前の通信をキャンセルしてから使うのが良いと思います。

swift

1 2var task: URLSessionDataTask? 3 4/// 検索予測をDBから取得 5func getDB(){ 6 7 task?.cancel() 8 9 /// パラメーターに送信情報を追加 10 let params = type_keyword /// タイプしたキーワード(1文字タイプするごとに) 11 12 /// POST送信 13 let urlString = "https://***" 14 let request = NSMutableURLRequest(url: URL(string: urlString)!) 15 request.httpMethod = "POST" 16 request.addValue("application/json", forHTTPHeaderField: "Content-Type") 17 do{ 18 request.httpBody = try JSONSerialization.data(withJSONObject: params, options: .prettyPrinted) 19 task = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: {(data,response,error) -> Void in 20 21 if let data = data { 22 let resultData = String(data: data, encoding: .utf8)! 23 24 DispatchQueue.main.async{ 25 26 ///ここから検索予測を反映させるVIEWの処理 27 28 } 29 } 30 }) 31 task?.resume() 32 }catch{ 33 34 print("Error:(error)") 35} 36

投稿2018/06/06 23:24

編集2018/06/06 23:34
_Kentarou

総合スコア8490

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

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

bilieikbilibili

2018/06/07 03:17

素晴らしい回答をありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問