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

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

ただいまの
回答率

87.96%

TableViewCellに情報が表示されない

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 466

score 22

前提・実現したいこと

学習のため体重管理アプリを作っていて、体重を入力したら履歴画面のTableViewCellに入力した体重の履歴が表示される機能を作っているのですが、値が表示されない状況です。
イメージ説明

該当のソースコード

ちなみにSegmentedControlの摂取カロリーは作成していない状況です。

import UIKit

class ViewController: UIViewController {
    // addViewControllerからnowWeightLabelに表示するデータを受け取る
    var weightDate:String?

    @IBOutlet weak var nowWeightLabel: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()


        guard self.weightDate != nil else {
            return
        }
        // nowWeightLabelのテキストにweightDateを設定
        self.nowWeightLabel.text = "\(weightDate!)kg"

        // アプリを再起動してもnowWeightLabelのテキストを保持する為nowWeightLabelのテキストをUserDefaultsに保存する
        UserDefaults.standard.set(nowWeightLabel.text, forKey: "nowWeightKey")
    }

    override func viewDidAppear(_ animated: Bool) {

        // UserDefaultsにnowWeightLabelのデータがあるか確認する
        if let _ = UserDefaults.standard.object(forKey: "nowWeightKey") as? String {
            // データがある場合はnowWeightLabelに表示する
            nowWeightLabel.text = (UserDefaults.standard.object(forKey: "nowWeightKey") as! String)

        }
    }
}
import UIKit

class historyViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    // tableViewに配列を表示するための変数
    var tableViewBox: [String] = []

    @IBOutlet var oneView: UIView!

    @IBOutlet var twoView: UIView!


    @IBOutlet weak var tableView: UITableView!

    @IBOutlet weak var segmentedControl: UISegmentedControl!

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = self
        tableView.dataSource = self

        self.view.addSubview(oneView)
//         デフォルトでは体重記録(weightBox)を表示
        tableViewBox = weightBox

    }

    override func viewDidAppear(_ animated: Bool) {

    }

    func addOneView() {
        twoView.removeFromSuperview()
        self.view.addSubview(oneView)
    }

    func addtwoView() {
        oneView.removeFromSuperview()
        self.view.addSubview(twoView)
    }





    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // tableViewBoxにある個数だけ表示
        return tableViewBox.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        // Cellの表示内容を設定
        let Cell : UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

        Cell.textLabel!.text = tableViewBox[indexPath.row]

        return Cell
    }



    @IBAction func segmentedControlButton(_ sender: UISegmentedControl) {

        switch sender.selectedSegmentIndex {
        case 0:
            addOneView()
//            if UserDefaults.standard.object(forKey: "weightBoxKey") != nil {
//                tableViewBox = UserDefaults.standard.object(forKey: "weightBoxKey") as! [String]
//            }
            tableViewBox = weightBox
        default:
            break
        }
        tableView.reloadData()

    }


}
import UIKit
// 体重を格納する変数
var weightBox = [String]()

class addViewController: UIViewController {

    @IBOutlet weak var weightTextField: UITextField!
    override func viewDidLoad() {
        super.viewDidLoad()
        // weightTextFieldの入力方法をナンバーパッドに設定
        weightTextField.keyboardType = UIKeyboardType.numberPad
    }

    @IBAction func okButton(_ sender: Any) {
        // weightBoxにweightTextFieldの入力情報を格納
        weightBox.append(weightTextField.text!)

        // weightBoxをUserDefaultsで保存する
        UserDefaults.standard.set(weightBox, forKey: "weightBoxKey")

    }

    // ViewControllerのweightDateにweightTextFieldの入力情報を引き継ぐ
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "Segue" {
            let vc = segue.destination as! ViewController
            vc.weightDate = self.weightTextField.text
        }
    }
}

試したこと

現在改善に向けて調べて試しているのですが、今現在改善していない状況です。
ちなみに改善に向けて試したことが下記のコードです。
ご教示頂けると幸いです。

override func viewDidAppear(_ animated: Bool) {

        // UserDefaultsにnowWeightLabelのデータがあるか確認する
        if let _ = UserDefaults.standard.object(forKey: "nowWeightKey") as? String {
            // データがある場合はnowWeightLabelに表示する
            nowWeightLabel.text = (UserDefaults.standard.object(forKey: "nowWeightKey") as! String)

        }
    }

補足情報(FW/ツールのバージョンなど)

XCode10

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • hik_

    2019/04/15 18:36

    横線が表示されているのでTableViewCell自体は表示されていると確認しました。
    historyViewの viewDidAppearに
    print(tableViewBox)を追加して確認したところ出力が[]となっていて、tableViewBoxが空っぽと言う事を確認しました。この箇所を探ってみようと思います。

    キャンセル

  • fuzzball

    2019/04/16 09:18

    >>横線が表示されているのでTableViewCell自体は表示されていると確認しました。
    それはTableView本体ですね。

    キャンセル

  • hik_

    2019/04/18 12:13

    ご返信ありがとうございます。
    そうなのですね、誤って認識していました。
    ということはセル自体表示されていない状況です。

    キャンセル

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

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

  • ただいまの回答率 87.96%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る