フクの非日常

スポンサーサイト

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

fetchedResultsController how to change sort

iPhoneを使っているとリストビューを使った画面が頻繁に出てくる。このリストビューの画面は、アプリケーション内部で持っているデータベースから情報を取得して、一覧(リスト)形式で見せるのに非常に都合がよく、定番の画面といえる。データベースのアクセスも、「どのデータ項目を」「どの並び順で」取得するかを指定すればカンタンにデータを取ってくれる。xcodeにはデータベース付きのリストビュー形式画面のひな形プロジェクトまで準備されているので、データの永続化(電源を切ってもデータが残るようにすること)は比較的ハードルが低い。

しかし、準備されているひな形を変えようとすると極端にハードルが上がる。今回やりたいのは、一度表示したリストに対し並び順を変更して再表示したいということ。例えば、最初に日付順で並べているリストをボタンを押したタイミングで語数順に並べて表示するということをやってみたい。普通に考えれば「もう一度検索走って再表示」なのだが、それをxcodeで実現するのに相当苦労した。。。

まずDBにどうやってアクセスしているか、だいたいのイメージしか持っていなかった。ひな形のソースを解析すると、データ取得条件やソート条件を指定している「fetchedResultsController」が肝というのはわかった。しかし、これをどうすれば良いかがさっぱり分からなかった。まずfetchedResultsControllerの中でソート条件を指定しているところを修正してみる。条件を変えると取得する結果が変わるのはすぐに確認できた。しかし、条件を変えて再表示ができない。再表示には「reloadData」を使ったが、「fetchedResultsController」は最初の1回しか通らず、動的に検索条件を変えることができなかった。

悩むこと一週間、国内のサイトは色々見たけれど「ズバリこれです」という解答は見つからなかった。困った末、海外サイトしかないと思ってGoogle先生に質問したのが「fetchedResultsController how to change sort」。すると、海外サイト「stackoverflow」からズバリの記事がヒットした。「Changing the Sorting in an NSFetchedResultsController on the fly」という質問のやりとりを読むと、検索条件を変えて走らせるやり方が回答されていた。それを実装すると・・・

SortSample_2.png
この並び順が
SortSample_1.jpg
こうなる。

できた!「stackoverflow」に感謝!!

コメント


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

 

トラックバック

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