RubyによるMac OS Xデスクトップアプリケーション開発入門 第9章
第9.3 取り消しとやり直しの完成?(P.142)まで進んだ。
試しに動かすと、追加と削除は動いてくれた。今回使用した
undo_manager.registerUndoWithTarget_selector_object_
は理解できなかったが。
編集の方はサブウィンドウの表示までは動くが、OKボタンを押すと止まってしまう。
ログを見ると
プログラムはシグナルを受信しました:“EXC_BAD_ACCESS”。
sharedlibrary apply-load-rules all
(gdb)
と出ている。
動いているソース部分は、
def update_entry(entry, attrs) old_attrs = entry.attributes entry.attributes = attrs self.selectedObjects = [entry] undo_manager.prepareWithInvocationTarget(self).update_entry(entry, old_attrs) undo_manager.ActionName = "Edit Entry" end
となっている。
どこが悪いのか、コメントアウトしつつ動かしてみた。
undo_manager.prepareWithInvocationTarget(self).update_entry(entry, old_attrs)
この箇所が入っていると、止まってしまうらしい。
なので、一時的に
def update_entry(entry, attrs) old_attrs = entry.attributes entry.attributes = attrs self.selectedObjects = [entry] # undo_manager.prepareWithInvocationTarget(self).update_entry(entry, old_attrs) undo_manager.ActionName = "Edit Entry" end
としたら、動いてくれている。
エラーログも出力されなくなった。
ログを見てもどこが悪いのかがよく分からない。
昨夜、MacOSXを10.6.2にしたのがダメなのだろうか?
もしかして、ループみたいになってるのか?
undo_manager.prepareWithInvocationTarget(self).update_entry(entry, old_attrs)
の部分で、自分が所属しているメソッド(update_entry(entry, attrs))を呼んでたりするようにも見えるけど、undo_managerを通して呼んでるんだろうし。
言語の仕様におっついてないから、ロジックが正常に動くのかどうかさえ目で追えないとは。。