🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Xcode

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

Swift

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

Q&A

1回答

1218閲覧

Could not load NIB in bundle: 'NSBundleというエラーがでる

marogura

総合スコア21

Xcode

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

Swift

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

0グッド

0クリップ

投稿2019/12/20 06:09

編集2019/12/21 20:37

前提・実現したいこと

textfieldに入れた日付をuserdefaltsで保存し、その日付をtableviewcellのLabelに表示させたい

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

'Could not load NIB in bundle: 'NSBundle

該当のソースコード

import UIKit class ViewController: UIViewController { @IBOutlet weak var tableview: UITableView! var dateList: [String] = [String]() var menuList: [String] = [String]() override func viewDidLoad() { super.viewDidLoad() tableview.delegate = self as? UITableViewDelegate tableview.dataSource = self as? UITableViewDataSource // ナビゲーションバーの背景色 self.navigationController?.navigationBar.barTintColor = .yellow tableview.register(CustomTableViewCell.nib, forCellReuseIdentifier: CustomTableViewCell.reuseIdentifier) if let storedDateList = UserDefaults.standard.string(forKey: "datelist") { // 読み込んだDateListをセットしてTableViewを更新する dateList = [storedDateList] tableview.reloadData() } if let storedMenuList = UserDefaults.standard.string(forKey: "menulist") { // 読み込んだMenuListをセットしてTableViewを更新する menuList = [storedMenuList] tableview.reloadData() } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } } extension ViewController: UITableViewDataSource { // セルの数 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return dateList.count } //セルの高さ func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return CGFloat(100) } // 表示するセルの設定 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { // UITableViewCellで返ってくるので、CustomTableViewCellで強制キャストする let cell = tableView.dequeueReusableCell(withIdentifier: CustomTableViewCell.reuseIdentifier, for: indexPath) as! CustomTableViewCell // セルのdate(UILabel)のtextに対応するDateList,MenuListの内容をセット cell.date.text = dateList[indexPath.row] cell.menu.text = menuList[indexPath.row] return cell } } エラーメッセージ

該当のソースコード

import UIKit class CustomTableViewCell: UITableViewCell { @IBOutlet weak var date: UILabel! @IBOutlet weak var menu: UILabel! // 以下の2つの定数・変数をstaticで追加 static let reuseIdentifier = "CustomTableViewCell" static var nib: UINib { return UINib(nibName: "CustomTableViewCell", bundle: nil) } override func awakeFromNib() { super.awakeFromNib() } override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) } }

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

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

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

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

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

hayabusabusash

2019/12/20 07:33

TableViewCellにはラベルなどを載せていますか? 可能ならTableViewCellのコード、TableViewのDataSource関連のコードも質問に追記で載せていただけないでしょうか?
marogura

2019/12/20 08:37

載せました。tableviewcellには何も入れてません。
guest

回答1

0

Swift

1UITableViewCell.text = String(dateField)

エラーとなった上記のコードですが、
UITableViewCellというのはクラスそのものになるのでそもそも書き方が間違っています。
あとUITableViewCellにはtextというプロパティは持っていないので質問に貼っていただいたエラーが出ています。

UITableViewCellはデフォルトでtextLabelというラベルをプロパティとして持っているので、
カスタムで作らなくても一応ラベルに文字を表示することはできます。
もしラベルの他にも画像などを表示したい場合はカスタムでセルを作ってください。( 参考 )

簡単にですがUserDefaultsに保存した物を読み込んで、
それをTableViewのセルに保存するのは以下のような感じになると思います。

Swift

1class ViewController: UIViewController { 2 3 @IBOutlet weak var dateField: UITextField! 4 @IBOutlet weak var tableView: UITableView! // Storyboardから接続してください 5 6 // UserDefaultsから読み込んだDateListを代入する変数 7 // これをTableViewに表示したいのでViewControllerに定義する 8 // 今回UserDefaultsから読み込むのは一つの値みたいですが、一応配列として定義しました. 9 var dateList: [String] = [String]() 10 11 override func viewDidLoad() { 12 super.viewDidLoad() 13 14 // TableViewのDataSourceを設定 15 // Storyboard側ですでに設定している場合は省略してください 16 tableView.dataSource = self 17 18 // まずはUserDefaultsからDateListを読みこむ 19 // string(forKey:)の返し値はString?なのでアンラップする 20 if let storedDateList = UserDefaults.standard.string(forKey: "datelist") { 21 // 読み込んだDateListをセットしてTableViewを更新する 22 dateList = [storedDateList] 23 tableView.reloadData() 24 } 25 } 26} 27 28extension ViewController: UITableViewDataSource { 29 30 // セルの数 31 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 32 return dateList.count 33 } 34 35 // 表示するセルの設定 36 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 37 let cell = UITableViewCell() 38 39 // ここでセルのtextLabelのtextにUserDefaultsから読み込んだDateListを表示する 40 cell.textLabel?.text = dateList[indexPath.row] 41 return cell 42 } 43 44} 45

2019/12/21追記(カスタムのセルについて)

追記ありがとうございます!
このカスタムのセルをTableViewで表示するようにするだけなので、あとはそんなにやることはないですね。

まずTableViewでカスタムのセルを使用する場合には、
事前にTableView側にカスタムのセルを登録する必要があるのでそれを準備します。

必要なのはセルのUINibと再利用されるときに使用されるID(String)なのでそれを用意します。
自分はよくセルにstaticな変数を作ってクラス名からアクセスできるようにしています。
貼っていただいたカスタムのセルだとこんな感じですね。

Swift

1class CustomTableViewCell: UITableViewCell { 2 3 @IBOutlet weak var date: UILabel! 4 5 // 以下の2つの定数・変数をstaticで追加 6 static let reuseIdentifier = "CustomTableViewCell" 7 static var nib: UINib { 8 return UINib(nibName: "CustomTableViewCell", bundle: nil) 9 } 10 11 override func awakeFromNib() { 12 super.awakeFromNib() 13 } 14 15 override func setSelected(_ selected: Bool, animated: Bool) { 16 super.setSelected(selected, animated: animated) 17 } 18}

次にTableViewにセルを登録します。

Swift

1class ViewController: UIViewController { 2 3 // ... 省略します 4 5 override func viewDidLoad() { 6 super.viewDidLoad() 7 8 // TableViewのDataSourceを設定 9 // Storyboard側ですでに設定している場合は省略してください 10 tableView.dataSource = self 11 12 // TableViewにセルを登録します 13 // CustomTableViewCellにstaticでnibとreuseIdentifier定義したので以下のように 14 // <クラス名>.nibみたいに使用できます. 15 tableView.register(CustomTableViewCell.nib, forCellReuseIdentifier: CustomTableViewCell.reuseIdentifier) 16 17 // ... 省略します 18 } 19}

あとはデリゲートメソッド内でカスタムのセルを返すように設定するだけです。
TableViewのdequeueReusableCell(withIdentifier:, for:)メソッドの返し値はUITableViewCellになるので、
作ったカスタムセルで強制キャストして、カスタムセルにアクセスできるようにします。

Swift

1extension ViewController: UITableViewDataSource { 2 3 // ... 省略します 4 5 // 表示するセルの設定 6 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 7 // UITableViewCellで返ってくるので、CustomTableViewCellで強制キャストする 8 let cell = tableView.dequeueReusableCell(withIdentifier: CustomTableViewCell.reuseIdentifier, for: indexPath) as! CustomTableViewCell 9 10 // セルのdate(UILabel)のtextに対応するDateListの内容をセット 11 cell.date.text = dateList[indexPath.row] 12 13 return cell 14 } 15} 16

こんな感じでどうでしょうか?

投稿2019/12/21 05:28

編集2019/12/21 11:36
hayabusabusash

総合スコア767

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

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

marogura

2019/12/21 07:46

ありがとうございます。textlabelにはDatelistを表示できたのですが、カスタムセルの中のLabel に表示させたいため、カスタムセルファイルを作ったのですが、どのようなコードを書けばいいのでしょうか?Viewcontrollerに書いたものと同じコードを貼り付けてみましたがうまくいきません。。。
hayabusabusash

2019/12/21 08:02

それなら作ったカスタムセルのコードも追記で質問に載せていただけませんか? 現状はカスタムセルではなく、標準のUITableViewCellを毎回生成して表示しているだけなのでそのままではだめですね。
marogura

2019/12/21 08:11

すいません載せました
marogura

2019/12/21 09:50

何度もすみません。let cell.tableView.dequeueReusableCell(withIdentifier: CustomTableViewCell.reuseIdentifier, for: indexPath) as! CustomTableViewCell のところで、Expression type 'CustomTableViewCell' is ambiguous without more contextとType annotation missing in patternとCast from '_' to unrelated type 'CustomTableViewCell' always failsのエラーが出てしまいました。
hayabusabusash

2019/12/21 11:37

すみません、めっちゃ変な書き間違いしてたのでコード修正しました????‍♂️
marogura

2019/12/21 12:36

ありがとうございます!ビルドしたのですが今度は ViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x7fbd087131c0' とクラッシュしてしまいました。関連付けを確認したところ特に問題はなかったのですが。。。
hayabusabusash

2019/12/21 15:32

ViewControllerはUITableViewDataSourceを継承していますか? コードを見た感じUIViewControllerだけになっているみたいなので、確認してもらえませんか?
marogura

2019/12/21 20:47 編集

そのエラーは無くなったのですがCould not load NIB in bundle: 'NSBundleっていうエラーが出てきました。もしかしてpods installしないとダメですか?
hayabusabusash

2019/12/22 05:17

おそらくCustomTableViewCellのxibファイルの名前がCustomTableViewCell.xibと違う名前になっているんだと思います。 CustomTableViewCellのnibを今のファイル名に合わせるか、CustomTableViewCell.xibに直してみてもらえませんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問