フクの非日常

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

fetched results controller how to change group

前回解決したかに見えたfetched results controllerとの戦いは実は続きがある。前回はソート順を変えて再表示することができた。やったやった~と喜んでいたのも束の間、よくよく見るとグループが変更できていないことに気がつく。これは何を言っているかというと、最初はグループなしでただ単純に日付順にリストを作っていた。つまり、全体で1つのグループを作っていた。次にリストを「語数」というグループに分けて、グループごとに並べ替えるということをやろうとしていた。サンプルで動かしていたのは最初から語数でグループ分けしたものを日付順にならべていたため、なんとなく動いているように見えた。しかし、グループの分け方を変えるには調べたやりかたでは実現できなかったのである。

さらに調べまくって得た結論は次の通りである。
・グループの条件は初期化時に指定するので、後からは変えられない
・NSFetchedResultsControllerはNSFetchedResultsControllerでできることしかできない(当然か)
・GROUP BYのように直接的にデータベースを扱いたいならばNSFetchedResultsControlleを使わない
・NSFetchedResultsControllerのクラスを継承して独自処理を作る
・リストを切り替えたいならば、複数のNSFetchedResultsControllerオブジェクトを作り、表示を切り替える
・NSFetchedResultsControllerをreleaseしてもう一度作る

これはもう、画面を2枚作って切り替えろということか。。。と半ば諦めていたがとりあえず最後に「eleaseしてもう一度作る」をやってみた。すると、エラーもなくあっさり動いた。たしかに次のようなコード例を見かけたがどう使って良いかわからなかった。

[fetchedResultsController_ release];
fetchedResultsController_=nil;

fetchedResultsController_のソースにブレークポイントを張って動きを見たが、はじめてリストを表示するときに初期化が呼ばれ実際の『Fetch』が走る模様。ということであれば、ボタンを押したタイミングでリリース&再作成と再表示をすればよいという結論に達した。動かしてみたら動いた。たった2ステップとはなんともあっけない。悩んだ末の答えは意外とこういう単純なものかもしれない。きっと100ステップくらい書き直したら間違った直し方なんだろうなー。

結局、イベントを受けて初期化を走らせ、初期化のなかでボタンが押されている条件を見てリストを作る条件を変えることにした。とにかく今度こそうまく行った!?

コメント


管理者にだけ表示を許可する
 

 

トラックバック

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。