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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

iOS

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

Swift

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

Q&A

1回答

244閲覧

Firebaseから取得した配列のcountがnilになってしまう

yamatatsu

総合スコア8

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

iOS

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

Swift

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

0グッド

0クリップ

投稿2018/06/29 15:38

配列の数に合わせて `numberOfRowsInSection` の設定をしたいのですが
クロージャの外は nil が入ってしまいます、、、なぜでしょうか?
またデータの表示ですが、viewDidLoad ではなくviewWillAppear に記述した方がよいのでしょうか?

どなたかご教授いただけますと幸いです。

class CategoryTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { @IBOutlet weak var tableView: UITableView! // CategoryCollectionViewControllerから選択されたCell番号を受け取る変数 var getCell: Int! // 選択された小カテゴリの配列の長さ変数 var arrayLength: Int! // 選択された小カテゴリの配列 // var smallCategoryArray: [String!] override func viewDidLoad() { super.viewDidLoad() tableView.delegate = self tableView.dataSource = self let nib = UINib(nibName: "CategoryTableViewCell", bundle: nil) tableView.register(nib, forCellReuseIdentifier: "SmallCategory") // テーブル行の高さをAutoLayoutで自動調整する tableView.rowHeight = UITableViewAutomaticDimension // データ取得 let ref = Database.database().reference().child(Const.ServicePath) ref.child("category").observeSingleEvent(of: .value, with: {(snapshot) in let categoryData = Category(snapshot: snapshot) let lunchArray = categoryData.lunch let dinnerArray = categoryData.dinner let outdoorArray = categoryData.outdoor // 選択されたジャンルによってセルの数を変える // getCellの中身が switch self.getCell { case 0: self.arrayLength = outdoorArray.count // DEBUG: Optional(3) となります print("DEBUG: (self.arrayLength)") //self.smallCategoryArray = outdoorArray case 2: self.arrayLength = lunchArray.count //self.smallCategoryArray = outdoorArray case 3: self.arrayLength = dinnerArray.count //self.smallCategoryArray = outdoorArray default: break } }) // DEBUG: nil となります print("DEBUG: (self.arrayLength)") } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) } // データの数(=セルの数)を返すメソッド func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { // DEBUG: nil となります return arrayLength }

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2018/06/29 16:22 編集

getCellの値を取得する部分が書かれてないため、switch文のdefaultしかとおらないのでは?
yamatatsu

2018/06/29 16:22

ありがとうございます。なぜでしょうか??
退会済みユーザー

退会済みユーザー

2018/06/29 16:28 編集

switch self.getCell { の下にprint("DEBUG: \(self.getCell)") 入れて動かしてみて。case0は通らないと思うよ。
yamatatsu

2018/06/29 16:36

print("DEBUG: \(self.getCell)") → DEBUG: Optional(0) となりました。
退会済みユーザー

退会済みユーザー

2018/06/29 17:43 編集

getCellはCollectionViewControllerから値をもらうんですね。 でswitch文はクロージャの中ですね。ごめんなさい勘違いしてました。 printされる順番が クロージャ外nil、numberOfSection内nil、クロージャ内optional(3)ってやつですね。 クロージャ内、switch文を抜けたところでtableViewをreloadData()するとどうなりますか?
yamatatsu

2018/07/01 12:27

tableViewをreloadData() で解決できました!ありがとうございました!
guest

回答1

0

// DEBUG: nil となります

のところではまだクロージャが実行されてません。
なので、初期値(nil)のままになっています。

投稿2018/06/30 00:05

MasakiHori

総合スコア3384

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問