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

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

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

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Swift

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

Q&A

解決済

2回答

352閲覧

Swift3 cellに配置しているLabelにデータが表示されません。

asuuuuuuuuu7

総合スコア16

Realm

RealmとはSQLiteやCore Dataに代わるモバイルデータベースです。iOSとAndroidの両方でサポートされています。

Swift

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

0グッド

0クリップ

投稿2017/07/26 03:42

tableViewのCellにLebelを配置した後、Realmに保存したデータをLabelに表示させたいのですが、エラーは出ずに表示されないという状況です。
なにが原因かわからないので、教えていただければと思います。

swift

1import UIKit 2import RealmSwift 3 4class todo: UIViewController { 5 6 7 @IBOutlet weak var todoNameText: UITextField! 8 9 @IBOutlet weak var tableView: UITableView! 10 11 12 var toDoItems = try!Realm().objects(database.self) 13 14// var toDoItems:Results<database>?{ 15// do{ 16// let realm = try Realm() 17// return realm.objects(database.self) 18// }catch{ 19// print("エラー") 20// } 21// return nil 22// } 23 24 override func viewDidLoad() { 25 super.viewDidLoad() 26 27 self.tableView.dataSource = self as? UITableViewDataSource 28 self.tableView.delegate = self as? UITableViewDelegate 29 30 31 32 // Do any additional setup after loading the view, typically from a nib. 33 } 34 35 override func didReceiveMemoryWarning() { 36 super.didReceiveMemoryWarning() 37 // Dispose of any resources that can be recreated. 38 } 39 40 41 @IBAction func addToDo(_ sender: UIButton) { 42 43 if isValidateInputContents() == false{ 44 return 45 } 46 47 // ToDoデータを作成する処理 48 let toDo = database() 49 toDo.name = todoNameText.text! 50 51 // ToDoデータを永続化する処理 52 do{ 53 let realm = try Realm() 54 try realm.write{ 55 realm.add(toDo) 56 } 57 todoNameText.text = "" 58 }catch{ 59 print("失敗") 60 } 61 tableView.reloadData() 62 63 } 64 65 66 private func isValidateInputContents() -> Bool{ 67 // ToDo名のデータ入力 68 if let name = todoNameText.text{ 69 if name.characters.count == 0{ 70 return false 71 } 72 }else{ 73 return false 74 } 75 return true 76 } 77} 78 79extension ViewController: UITableViewDataSource{ 80 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 81 82 let toDoItems = try!Realm().objects(database.self) 83 84 return toDoItems.count 85 } 86 87 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 88 89 let toDoItems = try!Realm().objects(database.self) 90 91// let toDo = toDoItems[indexPath.row] 92// 93// let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as! ToDoTableViewCell 94// 95// _ = toDoItems[indexPath.row] 96// 97// // Realmに登録したデータをラベルに値設定 98// 99// cell.nameLabel.text = toDo.name 100// 101// //print(toDo?.name ? ) 102// print(toDo.name) 103// 104// 105// return cell 106// } 107//} 108 let cell: UITableViewCell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "Cell") 109 110 // todoItemに代入されたデータをobject:NSArrayに代入 111 let object = toDoItems[indexPath.row] 112 113 //cellのtextLabelのtextにobjectのtitleプロパティを代入 114 cell.textLabel?.text = object.name 115 116 117 return cell 118} 119} 120 121

swift

1import UIKit 2 3class ToDoTableViewCell: UITableViewCell { 4 5 6 7 @IBOutlet weak var nameLabel: UILabel! 8 9 10 11 override func awakeFromNib() { 12 super.awakeFromNib() 13 // Initialization code 14 } 15 16 override func setSelected(_ selected: Bool, animated: Bool) { 17 super.setSelected(selected, animated: animated) 18 19 // Configure the view for the selected state 20 } 21 22}

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

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

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

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

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

guest

回答2

0

ベストアンサー

今のままだと、todoクラスにUITableViewDataSourceが適用されていないように見えます。

extension ViewController: UITableViewDataSource{

としているところを

extension todo: UITableViewDataSource{

としてみてはどうでしょうか?

投稿2017/07/26 03:55

k-motoyan

総合スコア78

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

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

asuuuuuuuuu7

2017/07/26 16:12

ありがとうございました、指摘していただいた部分を変更したところ反映されました。 凡ミスにもかかわらず回答ありがとうございました。
guest

0

swift

1cell.textLabel?.text = object.name

カスタムセルを使っているのであれば、textLabelではなくnameLabelではないのでしょうか?
そのままではアクセス出来ませんので、セルを取得するときにToDoTableViewCellにキャストして下さい。

投稿2017/07/26 03:53

fuzzball

総合スコア16731

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問