• ベストアンサー

tableViewのreloadDataについて

ObjectibeCを用いてiPhoneアプリプログラミングの勉強をしています。 テーブルビューについて疑問があるので助言をお願いします。 [self.tableView reloadData];という処理は、再読み込みをする処理だそうですが、何を再読み込みしているのでしょうか? この記述が読み込まれた時、何が起こるのか どんな時にこの記述が必要となるのか という事を主に知りたいです。 回答お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.1

まず説明の前提として、MVCデザインパターン(MVCモデルや、MVCアーキテクチャと呼ばれることもある)の概要を知る必要があります。MVCは、Model(内部データなど)、View(ユーザインターフェイス)、Controllerのことで、ソフトウェア設計の基本パターンのひとつです。ポイントは、データとユーザインターフェイスを分離して設計するところで、データ構造の変更がユーザインターフェイスの設計に直接影響を与えず、逆にユーザインターフェイスの変更がデータ構造に影響を与えないようにすれば、ソフトウェア全体の開発が容易になるというものです。Controllerは、ModelとViewを仲介する部門を指します。 iOSは、このMVCを基本にしたフレームワークとして構成されています。iOSには、Controllerが名称に付くクラスが多数ありますが、それはMVCを基礎にした設計である証です。 UITableViewは、典型的なMVCにもとづくViewであり、Table Viewに表示するデータは、完全に独立したデータ(NSArray、NSDictionary、Core Dataなど)にすることが前提になっています。 MVCで特徴的なことは、データの変更、更新がただちにユーザインターフェイスに反映されないという点です。Controllerが、その責任において、データの更新を、インターフェイスに反映させなければなりません。 UITableViewのreloadDataというメソッドの役割は、以上の説明で理解してもらえると思います。

ifonesapp
質問者

お礼

回答ありがとうございます! MVCデザインパターンというものを初めて知りました。 非常に詳しい解説ありがとうございます^^ つまりTableViewにおいてreloadDataメソッドを実行すると - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath が再読み込みされる。 という認識で良いのでしょうか? データの更新→ただちにユーザインターフェイスに反映 という処理をしたいと考えた時、今回のMVCという知識が頭にあると自力で解決できそうですね。 とても為になりました。

その他の回答 (2)

回答No.3

> 実際にNSLogを先のメソッドの文末に書き加えてみたところ、Logは表示されませんでした メソッドの先頭じゃなくて文末ですか?まさかreturn文の後に入れたりしてませんよね? そのテーブルが表示されている状態でreloadしたなら、メソッドは呼ばれているはずですよ。

ifonesapp
質問者

お礼

回答ありがとうございます! return文の後に入れていました>< メソッドが実行されているか確認する時は、先頭の方が確実ですね ひとえにNSLogを使ったデバッグでも、コードが読み込まれているか、メソッドは読み込まれているかなどの違いによって、どこにNSLogを挿入すれば良いか考える必要がありますね 勉強になりました。 問題解決まで複数の回答、ありがとうございました!m(_ _)m

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.2

> という認識で良いのでしょうか? そういうことは、実験してみればわかります。それらふたつのメソッドの中に、NSLog(@"A method ~ was called.");というようなコードを書いておいて、reloadDataを実行すれば、結果が出ますよ。 現時点でもそうかもしれませんが、近い将来、プログラムが進んでくると、コードを書く時間より、デバッグする時間のほうが長くなってきます。効率のいいデバッグ方法を考案できるかどうかが、プログラマの資質として問われるようになります。そういう段階で「うまくいきません。理由と解決方法を教えてください」と投稿して、回答を待っているのは、最低のデバッグ方法といわなければなりません。 私の言っていることがわかりますか?あなたのこの質問は、愚問だと言っているのです。

ifonesapp
質問者

お礼

回答ありがとうございます。 NSLogを使ってデバッグする方法は頭にあり、先の質問のコードでもそういう方法でデバッグをしていたはずなのですが TableViewのメソッドに使うという方法が何でか思いつきませんでした 頭が固くて困ります;; なんとなく自分の書くメソッドとは違う、特別なメソッドという考えが頭にあったかもしれません 実際にNSLogを先のメソッドの文末に書き加えてみたところ、Logは表示されませんでした!(表示されるものだとばかり・・・) という事は、再読み込みは先に挙げたメソッドを再読み込みしているわけではないという事になるんでしょうが だとしたら、ますます何を再読み込みしているのか分からなくなってしまいました。