2014年1月24日金曜日
[iOS][Objective-C]UITableViewについて その2
どうも。
前に、
UITableViewについて書いて、
「コレクションを使ってハンドリングしようぜ(`・ω・´) 」
ってなことを書いたワケですが。
http://synonym-of-raspberry.blogspot.jp/2014/01/iosobjective-cuitableview.html
例えば、
商品一覧をTableViewに表示するとしたら、
・商品名
・価格
・在庫数
など、
複数のデータを表示することになる。
こういうのは、
Itemみたいな名前のクラスに、
ひとまとまりの情報として持っておきましょうとなり。
そうすると、
NSString *name;
int price;
int stock;
みたいなメンバで構成し、
それぞれのGetterやSetterがあって。
で、
TableViewの方に戻ると、
TableViewCellでそれらの情報を表示するときは、
TableViewCell内のUILabelになるワケで。
そうすると、
UILabelのsetTextは引数にNSString*が必要。
ので、
- (NSString *)getPriceStr
みたいなGetterを追加しといてやると、
表示部分のコードがすっきりするんじゃないかと。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath内で、
Item *item = [itemList objectAtIndex:indexPath.row];
[cell.itemLabel setText:[item getPriceStr]];
と、
それなりにシンプルで読みやすくなりそう。
intの値をGetして変換して、
でもいいけど、
デリゲートメソッドの中がぐちゃぐちゃしちゃうから…。
xxxViewControllerの中に切り出すと、
xxxViewControllerが無用に肥大化するし、
別の画面でも必要なときは、
同じ処理を別のViewControllerにも書かなきゃいけないし。
この辺りは好みによってきたり、
スマートな方法はいくらでもあるし、
プロジェクトによって諸般の事情があったりするとは思いますが。
個人的な経験に照らしてみると、
画面のコード(xxxViewController)や、
UITableViewのデリゲートメソッド内を、
少しでもすっきりさせた方が、
コーディングやメンテナンスが楽になる。
ただでさえ、
UITableViewのデリゲートメソッド内は、
switch文もしくはif文での分岐を余儀なくされるし、
StoryboardのprototypeCellなんかを使えば、
セル内の構成部品の外観に関するコードも、
cellForRowAtIndexPathに書かなきゃならなくなったりと、
ごちゃごちゃしがち(´・ω・`)
後々のこと、
誰か他の人が手を入れる可能性まで考えれば、
なるべくきれいな形にしていた方がいいかな、
などと思ったりするが、
他の人はどうしてるのだろうか…?
ちなみに、
これを書いてるこの日、
強くこのことを再認識した…。
既に担当を外れたメンバーが書いた画面に、
仕様の変更が入って、
俺が手を入れなきゃいけなくなって…。
デリゲートメソッド内がぐちゃぐちゃ(´・ω・`)
トピック的には外れるけど…。
いわゆる変数のスコープとか、
メソッドから値をreturnすることが、
イマイチ分かっていない人だったので、
不必要に広いスコープに変数を持って、
その変数を散らばせて処理してて、
これも骨が折れたw
ともかく、
最終形がUITableViewになる場合は、
その下準備の段階から、
「整理」を意識しておかないと、
バグも検出しづらいし、
改修もしづらい。
それでは。
ちゃお☆
まこぴー。