NSTextViewにCommand Paletteをつける

Cocoa勉強会2019/09/11の資料。

ソースコードだけ、資料は頭が回らない。あと、よく落ちるバグ付き。

CommandPalette.zip を解凍すること。

ソースコードの動作はムービーで動作確認したほうが早い( CommandPalette.mov )

エアコンはフィルターを掃除したら治った。

NSUserDefaultsControllerでbinding出来るデータ構造についてのメモ

NSUserDefaultsControllerとcocoa bindingを使い、初期設定WindowのUIを作ろうとして失敗した。 その失敗についての箇条書きのメモ

  • NSUserDefaultsが持っているデータ構造は、plist形式と考えて良い。
  • NSUserDefaultsがデータ構造に情報を溜め込むアクセッサ、setStringやsetIntgerなどは、keyを指定し、keyPathではない。
  • plistなデータ構造の深い位置にアクセスするにはkeyPathで指定できるべきである。
  • NSUserDefaultsで保持するデータは、keyで指定可能な位置の物は、mutableである。keyPathが必要な場所は、immutableになっているように見える。
  • ググると、mutableCopyした後に変更を加えて、setObjectしている事例がいくつかある。
  • NSUserDefaultsControllerは、深い階層へのPathのアクセスの不具合や、immutableなArrayやdictonaryの問題を解決するわけではない。
  • NSUserDefaultsControllerで使うPathは”values.key”のようにドットは1つまでにする必要がある。”value.key1.key2”のようにする、中間のimmutableなobjectがKVOに対応していないとログに警告とエラーが出る。
  • 泥臭い解決方法は、plist形式と言いつつ、最初の階層だけのフラットな構造にすると良い。”values.key1.key2”を”values.key1_key2”のようにする。
  • NSUserDefaultsControllerのselectedObjectにさらにNSArrayControllerを噛ませて、TableViewで表示する方法は、NSUserDefaultsControllerがNSArrayController側の変更を検知できないようだ。
  • おそらく、NSUserDefaultsControllerで取得した値をdeepMutableCopyして、ViewControllerに持たせ、そのデータが変わった時に、NSUserDefaultsControllerに反映させる方法が良いようだ。

もうやり気が出ない。

室温が30度を超える。

平年並みとの事。頭痛がするほど暑く感じる。

扇風機だけでは頭が働かない。仕事部屋にクーラーが欲しい。