テーブルビューにイメージセルをセットする
テーブルビューに画像を表示したい場合はイメージセルを使います。Interface BuilderのLibraryパレットにImage Cellがありますので、それを探して下さい。
Image Cellアイコンをドラッグして、テーブルビューの先頭カラムにドロップします。
それ以外のカラムはもう不要なので、削除してしまいます。
テーブルカラムのバインディングがresolutionに設定されているので、これをbezierPathに変更します。bezierPathはLissajousエンティティの親エンティティであるPathHolderが持つ属性で、Lissajousエンティティの場合リサージュ図形を表すオブジェクトです。
そしてValue Transformerに先ほど登録したRMGPathToImageを入力すれば、バインディングの設定は完了です。

テーブルビューが一列になったので、形状が縦長になりました。それに合わせて全体の配置を見直し、右図のようなレイアウトとしました。
Amplitudeは現時点では設定する意味がないので、ビューを削除しました。
テーブルビューを含むスクロールビューの横幅を120としました。そしてテーブルビューのRow Height(行の高さ)を100としました。
Add, Removeボタンはプッシュボタンの形状でしたが、テーブルビューが小さくなったのでSquareにしました。
最初はタイトルに"+"を指定していたのですが、システムで使われているボタンと異なり、どうも見栄えがよくありません。これはImageにNSAddTemplateを指定する事で解決しました。"-"ボタンはNSRemoveTemplateです。
他にもシステムで使われているアイコンが多数登録されています。
テーブルビューに図形が一つしか表示されない
動作確認してみると、特に支障なく動いています。プラスボタンを押してリサージュ図形を新規作成、パラメータを変更するとそれがOscillatorViewとLissajousViewに反映され、同時にテーブルビューの図形にも反映されている。特に問題ありません。
問題が発生したのは、一度保存したファイルを読み込んだ時でした。右の図がその状態です。リサージュ図形が四つあるのですが、テーブルビューには最初の一つしか表示されません。データ自体はちゃんと存在し、テーブルビューの二番目、三番目をクリックするとリサージュ図形が表示されます。どうも最初の表示がうまくいっていない様です。
フォールトが関係あるのか?などと関係ない方向に進んだりもしながらも原因がようやくわかりました。LissajousのawakeFromFetchでbezierPath属性を更新していないのがいけない様です。
//
// Lissajous.m
//
- (void)awakeFromFetch
{
[super awakeFromFetch];
[self updateBezierPath];
}
LissajousにawakeFromFetchを追加し、そこでupdateBezierPathを呼び出したらちゃんと表示される様になりました。
疑問なのはOscillatorのawakeFromFetchでLissajousのupdateBezierPathを呼び出しているのに、なぜそれではダメなのか?という事です。
ひょっとしてファイルから読み込まれる順番が不定なので、Oscillatorが存在しているのにLissajousがまだ存在していないという状況があり得るという事なのでしょうか?

ホーム
前へ