NSRuleEditor


※画面は開発中の物です

某プロジェクトマネージャー様からお勉強しておくようにとの、お達しがありました(違 ので NSRuleEditorのお勉強をしてました。

まず、チラ見しただけで逃げ出したので勘違いしてましたが、NSRuleEditorはサブクラス化せずとも十分色々遊べます。
そしてもちろんローカライズもformat fileを用意するだけでOKです。
上の画像、中央のあれがローカライズしてあるformat file適用、下のが未適用です。row当たりのビューの数が多くても問題なく順番を変更してくれます。format fileの該当行はこんな感じ。

"%[creationDate]@ %[between]@ %@ and %@" = "%1$[作成日が]@ %3$@ から %4$@ %2$[の間]@";


某プロジェクトで使用しているあれは勢いに任せて作った代物ではあったけどNSPredicateEditorよりも高機能なので、あれをエミュレートするにはNSRuleEditorが必要です。NSPredicateEditor,つか、NSPredicateEditorRowTemplateは3つしかビューを持てないんだよね。無理矢理持たせてもあんまり意味ないし。ローカライズしてくれないし。


NSRuleEditorは分かってしまえばそんなに難しくなくて、要は、NSTableViewのDataSource見たいなのを書くと出来ちゃう。某あれのあのクラス群を意識して書いちゃったからかなり普通じゃない実装方法のようです(w
グチャグチャ弄って分かった自分の理解とサンプルの実装方法との乖離が激しすぎて驚きました(w
まあ、今の所見た目部分しか実装してないのでNSPredicate取り出す部分で死ぬ可能性があります。死んだらどうしよう(w


今回ももちろんハマりどころがありました!
NSRuleEditorのdelegate method
- (id)ruleEditor:(NSRuleEditor *)editor child:(NSInteger)index forCriterion:(id)criterion withRowType:(NSRuleEditorRowType)rowType
で返すオブジェクトは、コピーされても、-[NSObject isEqual:]で同一と判断されなければなりません!
これ、前もやった気がする。つか、ドキュメントに書いておていくれるありがたいんですけど。