Cocoa

NSTableView * NSArrayController && !CoreData

今まで、NSTableViewとNSArrrayControllerを使うときは、CoreDataと一緒にしか使ったことがなかった。
ただ、そんないつもCoreDataが必要ということはないので、勉強もかねてPlainなオブジェクトと一緒に使ってみる。

参考:Takeba.me: ビュー・ベースのNSTableViewをさわってみたよ
※ 記事の本題とは違いますが、CoreDataを使わないサンプルとして参考になりました
なお、サンプルコードのリポジトリがこっちに変わっているようでした。
takebayashi/ViewBasedTableSample · GitHub

下準備

  1. プロジェクト作成
  2. 「MainMenu.xib」を開く
  3. Windowに「NSTableView」を追加。「Columns」を1にしておく
  4. Objectsに「NSArrayController」を追加。「arrayController」としてAppDelegateにOutlet接続

NSTableColumnとNSArrayControllerをBind

  1. ValueのBind toを「Array Controller」に
  2. Model Key Pathを「name」に

Modelオブジェクトの作成

  1. NSObjectを継承したクラスを作成
  2. Publicな「name」プロパティを追加

ArrayControllerにデータをセット

applicationDidFinishLaunching:で以下のようにarrayControllerにデータを設定。

これでTableViewに30件のデータが表示される。

ArrayControllerが面倒を見てくれるので、DataSourceの設定はいらない。
絞り込みとかも簡単にできる。

例えば、NSSearchFieldを使う場合、

  1. Windowに「NSSearchField」を追加
  2. SearchのBind toを「Array Controller」に
  3. Predicate Formatに「name contains $value」を指定

とするだけで、インクリメンタル検索ができるようになる。

うん、シンプルでいい感じ。
ちょっとは理解できてきたかなぁ。

あ、プロジェクトは一応こちらに置いてます。
tnantoka/ArrayControllerPractice · GitHub

それでは。

Macアプリから内蔵辞書を引きたい

自分用のツールを作ろうとして英和辞典を検索したいニーズがあったのでメモ。
ニーズはたくさんありそうなのに思ったより日本語情報が少なかったです。(なぜかPythonの情報の方が多かった…)

Control + Command + d でいいじゃんという突っ込みはなしの方向で。

 

方法1:辞書.appで表示

辞書.appには「dict://」というカスタムURIスキームが用意されているようなので、

とかやれば、検索できます。
辞書の指定とか細かい制御はできなさそうです。

参考:Mac OS X Lionで内蔵辞書を引く #Mac #dictionary – Qiita

 

方法2:アプリ内で表示

こちらが本命。
Dictionary Services Reference によると DCSCopyTextDefinition を使えばできそうです。

という感じでできました。
__bridgeのせいで見づらいですが、意外と簡単でした。

冒頭の宣言と辞書の指定は、OS Xの辞書アプリをコマンドラインから – PC日記 を参考にさせていただきました。(辞書指定しないと英語の辞書が使われてしまいました)
この部分がUndocumentedなので、Mac App Storeの審査に通るかはグレーです。

HIDictionaryWindowShow を使えばControl + Command + dのようなポップアップ表示もできるようです。
参考:日暮れて道遠し: PDFkit(その5)辞書.appで辞書を引く(その3)

 

サンプル

上記2つの方法を試せる簡単なサンプルを作ってみました。左のTextViewで文字列を選択すると、ポップアップで選択されている方法(OpenURL or DCSCopyTextDefinition)で辞書を検索します。DCSCopyTextDefinitionの場合は右のTextViewに結果が表示されます。

こんな感じです。

ソースはGithubに置いておくのでご自由にどうぞです。
tnantoka/DictionaryServicesExample · GitHub

しかし、Macアプリ作成は全然上達してる気がしないなぁ…。 もっと頑張ろうっと。

それでは;-)

 Scroll to top