NSApplication を使うコードを簡単に #2
あー、こないだのだと NSApplication#terminate: でプロセスが終了しちゃうのか。ブロックの返り値を持たせてるところを検証しようとしたら、そこまで実行されないことに気づいた。stop: でも runloop が完全に止まるわけでもないしなあ。
うーん、どうするのがいいんだろ?
- あきらめる(ブロックの実行後、必ず終了する)
- すごいがんばる
前者かなあ。
名前空間に delegate のクラスがわざわざ作成されるのが気持ち悪いような気もするので、無名クラスを使うように変えてみた。
require 'osx/cocoa' module OSX def NSApplication.run_with_temp_app(&proc) # create delegate of NSApplication delegate = Class.new(OSX::NSObject).alloc.init def delegate.applicationDidFinishLaunching(sender) begin @proc.call ensure OSX::NSApplication.sharedApplication.terminate(self) end end def delegate.proc=(block) @proc = block end delegate.proc = proc # run new app app = NSApplication.sharedApplication app.setDelegate(delegate) app.run end end
ホントは NSObject のインスタンスの特異メソッドにしたかったのだけど、RubyCocoa では、ruby で定義したメソッドが呼ばれるのは、ruby で定義したクラスだけなので。
| 固定リンク
最近のコメント