Day: May 24, 2015

Swift:NSTreeController / NSArrayController相関図

Swift版のツリー制御サンプルプログラムの相関図です。

NSTreeController / NSArrayControllerを使った場合、バインドや接続がどうなっているかわかりにくいので、ドキュメントを起こしました。

Objective-Cとの違いは、プロパティの取り扱いのような気がします。プロパティ自体を機能・用法の両面でよくわかっていないのでうまく説明できないです。自分なりには、Swiftでは単純にグローバル変数として定義し、クラス名やobjectValueで修飾すればいい、と理解しています。ただし、override initとsuper.initはそれなりの配慮( =ちゃんとした理解)が必要な気がします。

1. 相関図

スクリーンショット 2015-05-24 18.48.16

2. 変更点

スクリーンショット 2015-05-24 18.48.39

Swift:ツリー構造のディレクトリ

フォルダやファイルをツリー構造で表示させる方法を考えていました。

一方で、自力で作るためにバッファ(NSArrayの配列)のダイナミック管理をするメソッドを書き上げました。50行くらいの短いメソッドがふたつなのです。短い割にロジックがむずかしく、何回も机上デバッグしたあとでも、難解でした。

自作ツリー表示の良い点は、Table Viewなので細かいところまで制御可能で、これまでいくつか書いたコードとの互換性がいいことです。悪い点は、仮にうまく動いたとしても障害が出たときに手に負えなくなることです。

他方で、1年前に見つけたツリー構造のObjective-CサンプルプログラムをSwiftにコンバージョンすることも考えました。これは、過去3、4回トライして、いずれも力不足で失敗しました。よくわからない箇所があるのと、全ラインをSwiftにコンバージョンできなかったのが原因です。

今回もダメかなと思いました。しかし、コンバージョンは比較的簡単にできました。少しはSwiftが身についたのかもしれません。それで、動かしてみたら、1行だけは表示されました。それで、これだけできれば立派なものと、トレースを追いかけながら慎重にバグを潰しました。

結果、SwiftでNSTreeControlloerを使ったツリー表示ができる見通しが得られました。EXIFアプリやMesaClipに適用する場合、clicked RowとかIBAction、Copy and Dropが想定通り使えるかで機能制限が出てしまいます。この点について、検討する必要があります。

アイコン表示がまだできていません。これは、文字にする予定なので、現時点では深く追求しません。

でもせっかく作ったのだから、この方式で行きたい気もします。

スクリーンショット 2015-05-24 16.10.52