[Mac] NSTableView のカラムの位置やソート状態を保存する

2010年11月26日金曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

NSTableView は実行時にカラムの順番を入れ替えたりソート順を替えたりすることができる。この状態を保存しておき次回表示時に同じ状態に復帰させるにはどうしたら良いか?



autosaveTableColumns


NSTableView には autosaveTableName と autosaveTableColumns が用意されていてこれを使うことができる。
NSTableView Class Reference

この2つは Interface Builder で設定することができる。
設定すると NSTableView 〜 というエントリがアプリケーション設定ファイルに記録されるようになる。

これを使うとカラムを入れ替えや幅が記録され、次回表示時に自動的に反映されるようになる。

なおこの機能を使うには各カラムの Identifier を設定しておく必要がある。
設定しない場合実行時に下記のエラーが発生する。
NSTableViewSample[15812:a0f] Column identifiers used with 
 NSTableView autosave feature must conform to NSCoding protocol: (null)


Bindings 利用時のソート状態を保存する


Cocoa Bindings を使っている場合、NSTableView の autosave* は使えない。この場合は NSArrayController などのコントローラの Bindings 設定を使う。

NSTableView で使用している NSArrayController の Bindings設定を開き、"Sort Descriptors" を設定する。


バインド先(Bind to:)は "Shared User Defaults Controller" とする。これでアプリケーション設定ファイルに保存ができる。"Model Key Path" には任意の文字列を入れる。この文字列がアプリケーション設定ファイルでのキー値となる(なのでアプリケーション内で複数の NSTableView を扱う場合はユニークにしておく)。Value Transformer には plist で保存・読み込みができるように "NSUnarchiveFromData" を設定する。最後に "Validates Immediately" を設定するとソート順が変更された時に設定ファイルへ書き込まれるようになる。

これでソート順の自動保存・復帰が実現できる。

ソースコード


GitHub からどうぞ。

NSTableViewSample at 2010-11-26 from xcatsan's MacOSX-Sample-Code - GitHub


参考情報


sortDescriptors
今回の方法が解説されていた投稿。とても参考になった。

Responses

Leave a Response

人気の投稿(過去 30日間)