Cocoa Bindingのツボ
Objective-CでのCocoa版Star Fleet Empireの開発ですが、長いことCocoa Bindingにはまっていて、停滞してましたが、MacBookが来てから、Macに触る時間が増えて、ようやくわかってきましたよ。
Cocoa Bindingのツボは、データの変更をかならず「Setterを通して行う」っていうことのようです。Objective-CはC言語とオブジェクト指向記法のハイブリッド言語なので、インスタンス変数を変更する場合にC言語的な記法で変更する方法と、メッセージを通して行う方法があります。例えば、"name"っていうインスタンス変数があって、setterが"setName"な場合、nameを変更する方法は、C言語的になら、
name = "hogehoge";
っていう感じで直接代入する方法があります。これに対してメッセージを使う場合、
[self setName:"hogehoge"]
っていう風に、オブジェクト指向の記法で書けます。
通常は前者の方が実行効率が良いので、前者の記法を使うのですが、nameをbindingして画面で表示している場合には、後者を使わなければならないのですね。おそらく理由は、Cocoa bindingというのはメッセージを監視して、変更メッセージにあわせて画面を変更する技術だからでしょう。だからC言語的記法で直接変数を変更しても決して画面には反映されない。これが私のハマっていた点で、Cocoa Bindingのツボのようです。
これを突破口に、一気に開発を進めたいところです。