HOME » Natsu note » 古い投稿 » Core Data 勉強日記 (13):More iPhone 3 Development / chapter 7 (補足)

Core Data 勉強日記 (13):More iPhone 3 Development / chapter 7 (補足) 2010/02/25/|古い投稿

この記事は情報が古い可能性があります。参照する際にはご注意ください。

More iPhone 3 Development: Tackling iPhone SDK 3 (Beginning) Chapter 7 のまとめ(補足)。

Chapter 7 主な内容は以下参照。
Chapter 7 : 関連 (Relationship)
Chapter 7 : 取得済みプロパティ (Fetched Property)

Chapter 7の後半では、追加した Relationship や Fetched property に対応するために、だいぶコードをいじっている。それに関する内容を少しだけ。

汎用的な View Controller

今後も流用可能なように、かなり汎用的な View Controller が作られる。コンセプトとしてはよいが、やや無理矢理な箇所もいなめない。実際に利用する場合、イイトコ取りをしたほうが良さそう。

中でもかなり使えそうなのは、カテゴリをうまく使ったクラスの拡張方法。今までほとんど使ったことがなかったけれど、これはかなりよい。コードの可読性もあがるし、コード量を減らすことにもつながる。

本書の読み方

「読み方」とまで言うのは大げさかもしれないが、Chapter 7の後半部分はかなりややこしい(かつ、若干詰め込み過ぎの感あり)ので、心して取りかかったほうがよい。

ここに至るまでは、基本的に前から順を追って読んでいれば問題なく理解できたが、最後になってちょっと苦戦した。わかりにくい理由は明確で、chapter 4(詳細画面表示)で追加した、テーブル表示や画面遷移に関わるすべての情報を持つNSArrayの構成が複雑になったのだ。

To-Many Relationship や Fetched Property に対応するために、少しばかりトリッキーな(変数名と中身が微妙に違っていたり)ことをしている。その詳しい説明なしに、利用する側のクラスを実装していくので意味がわからなくなる。

と、いうことで、もし悩んだら、先に p.211 Adding Factory Methods for Hero and Power に目を通すとよい。これで、すべてがすっきりした。

最後のバグに関する説明


注意:以下は、この本のp.218からp.221に関する指摘です。本の内容をまとめるのが大変なので、問題点のみ書きます。そのため、本を読んでいないと全く理解できないと思われます。。。

最後の最後、これはCore Data自体のバグだ、という説明がある。
内容としては、削除ルールがカスケードになっているRelationship を削除したにも関わらず、実態が削除されない、というもの。しかしこれはおかしい。なぜなら、もし本当に削除されていないのであれば、「Add New…」が二行表示されるのではなく、一行目には追加済み(かつ未編集)の Power オブジェクトの内容が表示されるはずだから。

問題になっているのは、「実態が削除されない」ではなく、「オブジェクトの削除より前にTableViewをリロードしている」ということだと思われる。該当するコードは ManagedObjectEditor.m

実際、tableView:numberOfRowsInSection: の時点では、powers が持つオブジェクト数が1であるのに対し(削除前)、tableView:cellForRowAtIndexPath: では、0になっている(この間に削除された)。そのせいで、2回「Add New…」が表示されるのだ。

そこで対策。著者のコードでは、viewWillAppear 内で [self.tableView reloadData] をしているが、これを、viewDidAppear にうつす。これでひとまずOK。

ただし、タイミングの問題なのでこれで完璧なのかはわからない。もし著者が、ここまで見越して対策コードを掲載しているのであればそちらを使ったほうがよいだろう。

最後に

200ページ以上にわたって書かれている Core Data の説明をとにかくひたすら読み、かなり理解できたつもりです。でも、もし勉強日記でまとめてきたことについて、間違いを見つけたり、疑問などある方は、twitter(@natsun_happy)やメール(ページ下に表示)で連絡をいただけるとうれしいです。

次は実践。次回作になるであろうアプリのプロトタイプ作成に入ります。

More iPhone 3 Development: Tackling Iphone Sdk 3 (Beginning)
Dave Mark Jeff Lamarche
Apress
売り上げランキング: 29207