頭と尻尾はくれてやる!

パソコンおやじのiPhoneアプリ・サイト作成・運営日記


macOSでバインドを使いテーブルを表示する

macOSでテーブルを表示させようとした。
NSTableViewDelegate、NSTableViewDataSourceを使わずにバインドを使う。
NSArrayControllerで検索するといろいろと参考ページが見つかると思う。

この方法は以前Objective-Cでやったことがあったのだが、今回はSwiftでやろうとしたらえらくはまってしまった。はまりすぎて、俺の理解がおかしいのか?とObjective-Cに戻ってまで確認したりもした。

YamaguchiTatsuya/NSTableViewWithBindings: Simple sample code for macOS, to show table view with bindings
↑とりあえず最小限のサンプルコードをGitHubで公開してみた。


NSArrayControllerをドラッグ&ドロップする

↑Interface builderでViewControllerにArrayControllerを追加(矢印のようにドラッグ&ドロップ)。

NSArrayController追加後の画面

↑ここに見えるので、これを選択して
1. outletを接続
2. Content ArrayをViewControllerのpropsArrayに設定

すると、ViewController内の以下のコードのように
        let tp1 = TableProps(name: "apple")
let tp2 = TableProps(name: "banana")
let tp3 = TableProps(name: "chocolate")

assert(arrayController != nil, "arrayController is nil")

arrayController?.addObject(tp1)
arrayController?.addObject(tp2)
arrayController?.addObject(tp3)

for tp in propsArray {
print(tp.name)
}

↑arrayControllerにデータを突っ込んだ直後にpropsArrayの中身を確認すると、ちゃんと表示されている!バインディングすげー!って感心しました。


テーブルで表示するには他にもテーブル周りでバインドを設定する必要がありますがサンプルコードでご確認ください。


なお、結局Objective-Cで動いたのにSwiftで動かず、
this class is not key value coding-compliant for the key name.
といったエラーばかり出てたのは、TablePropsクラスで@objc dynamic というのが必要だったためのようでした。

//var name: String = “” 実行時エラー
@objc dynamic var name: String = “”


Version
Swift 5.1.3
スポンサーサイト




<< macOSでFinderなどからviewにドラッグ&ドロップする  TopPage  独自ファイル形式のDocument Based Applicationのサンプルコード >>

コメント


管理者にだけ表示を許可する
 

トラックバック

トラックバックURL
https://ringsbell.blog.fc2.com/tb.php/1331-4e3933bd




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.