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

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

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

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

iOS

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

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

Q&A

解決済

1回答

257閲覧

AppDeledateのエラーでTableViewがうまく表示されません。

diamons

総合スコア7

TableView

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

iOS

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

Xcode

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

Swift

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

iPhone

iPhoneとは、アップル社が開発・販売しているスマートフォンです。 同社のデジタルオーディオプレーヤーiPodの機能、電話機能、インターネットやメールなどのWeb通信機能の3つをドッキングした機器です。

0グッド

0クリップ

投稿2020/07/01 05:42

たった二日でマスターできるiphoneアプリ開発講座という本で作っているアプリなのですがシミュレータで起動して検索するまでは良いのですがその後検索結果がTableViewに反映されず、AppDelegate.swiftにて下記のエラーが出てしまいます。解決方法が分かる方いましたらお願い致します。storyboardの接続の解除と再接続等やって見ましたが解決しませんでした。

イメージ説明

デバックエリアでは以下のような表示になっています。

イメージ説明

viewcontroller.swift

swift5

1import UIKit 2 3class ViewController: UIViewController, UISearchBarDelegate, UITableViewDataSource { 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 // Do any additional setup after loading the view. 8 9 //Search Bar のdelegate通知先を設定 10 searchText.delegate = self 11 //入力のヒントとなる、プレースホルダーを設定 12 searchText.placeholder = "お菓子の名前を入力してください" 13 //TableViewのdataSourceを設定 14 tableView.dataSource = self 15 16 } 17 18 19 20 21 @IBOutlet weak var searchText: UISearchBar! 22 23 @IBOutlet weak var tableView: UITableView! 24 25 //お菓子のリスト(タプル配列) 26 var okashiList : [(name:String , maker:String , link:URL , image:URL)] = [] 27 28 29 //検索ボタンをクリック時 30 func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { 31 //キーボードを閉じる 32 view.endEditing(true) 33 34 if let searchWord = searchBar.text { 35 //デバックエリアに出力 36 print(searchWord) 37 //入力されていたらお菓子を検索 38 searchOkashi(keyword: searchWord) 39 } 40 } 41 //JSONのitem内のデータ構造 42 struct ItemJson : Codable { 43 //お菓子の名称 44 let name: String? 45 //メーカー 46 let maker : String? 47 //掲載URL 48 let url : URL? 49 //画像URL 50 let image : URL? 51 52 } 53 54 //JSONのデータ構造 55 struct ResultJson : Codable { 56 //複数要素 57 let item :[ItemJson]? 58 } 59 //searchOkashiメソッド 60 //第一引数 : keyword 検索したいワード 61 func searchOkashi(keyword : String){ 62 //お菓子の検索キーワードをURLエンコードする 63 guard let keyword_encode = keyword.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else { 64 return 65 } 66 67 68 // リクエストURLの組み立て 69 guard let req_url = URL(string: "https://sysbird.jp/toriko/api/?apikey=guest&format=json&keyword=(keyword_encode)&max=10&order=r") else { 70 return 71 } 72 print(req_url) 73 74 //リクエストに必要な情報を生成 75 let req = URLRequest(url: req_url) 76 //データ転送を管理するためのセッションを生成 77 let session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue.main) 78 //リクエストをタスクとして登録 79 let task = session.dataTask(with: req, completionHandler: { 80 (data , response , error) in 81 //セッションを終了 82 session.finishTasksAndInvalidate() 83 // do try catch エラーハンドリング 84 do { 85 //JSONDecoderのインスタンス取得 86 let decoder = JSONDecoder() 87 //受け取ったJSONデータをパース(解析)して格納 88 let json = try decoder.decode(ResultJson.self,from:data!) 89 90 //お菓子の情報が取得できているか確認 91 if let items = json.item { 92 //お菓子のリストを初期化 93 self.okashiList.removeAll() 94 //取得しているお菓子の数だけ処理 95 for item in items { 96 //お菓子の名称、メーカー名、掲載URL, 画像URLをアンラップ 97 if let name = item.name , let maker = item.maker , let link = item.url , let image = item.image{ 98 //一つのお菓子をタプルでまとめて管理 99 let okashi = (name,maker,link,image) 100 //お菓子の配列へ追加 101 self.okashiList.append(okashi) 102 } 103 } 104 105 //TableViewを更新する 106 self.tableView.reloadData() 107 108 if let okashidbg = self.okashiList.first{ 109 print("----------------") 110 print("okashiList[0] = (okashidbg)") 111 } 112 } 113 } catch { 114 //エラー処理 115 print("エラーが出ました") 116 } 117 118 }) 119 //ダウンロードの開始 120 task.resume() 121 122 } 123 //cellの総数を返すdatasourceメソッド必ず記述する必要があります 124 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 125 //お菓子リストの総数 126 return okashiList.count 127 } 128 //cell に値を設定するdatasourceメソッド。必ず記述する必要があります。 129 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 130 //今回表示を行うCellオブジェクト(1行)を取得する 131 let cell = tableView.dequeueReusableCell(withIdentifier: "okashicell", for: indexPath) 132 //お菓子のタイトル設定 133 cell.textLabel?.text = okashiList[indexPath.row].name 134 //お菓子画像を取得 135 if let imageData = try? Data(contentsOf: okashiList[indexPath.row].image){ 136 //正常に取得できた場合には、UIimageで画像オブジェクトを生成してcellにお菓子画像を設定。 137 cell.imageView?.image = UIImage(data:imageData) 138 } 139 //設定ずみのCellオブジェクトを画面に反映。 140 return cell 141 } 142} 143 144

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

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

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

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

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

guest

回答1

0

ベストアンサー

おそらく、「たった2日でマスターできる iPhoneアプリ開発集中講座」の p.379あたりにある「Table View Cell の [Style] と [Identifier] を設定」の部分を実行されていないか、図中の(3)にあたる Identifier の記述内容が間違っているのかとおもいます。

p.379 の Identifier では 「okashiCell」とCが大文字ですが、掲載していただいたコードだと

Swift

1 let cell = tableView.dequeueReusableCell(withIdentifier: "okashicell", for: indexPath)

cが小文字 になっていますので、これが原因かもしれません。どちらかに合わせると良いかと思います。

投稿2020/07/01 05:53

TsukubaDepot

総合スコア5086

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

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

diamons

2020/07/01 06:00

前回に引き続きありがとうございます。ご指摘通りでした。打ち間違いをなくしていけるように努力していきたいと思います!
TsukubaDepot

2020/07/01 06:03

打ち間違いというか、ここは単なる Identifier(識別子)であり、両方で揃えば意味のない文字列でも大丈夫ですので、揃えることに気をつければ大丈夫です。
diamons

2020/07/01 06:08

なるほど、そういうことなんですね。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問