0

私のセットアップ

  • XCode 4.3.2
  • MacRuby 0.12(ruby 1.9.2)[universal-darwin10.0、x86_64]
    • 2012年6月4日現在の毎晩の最新情報
  • OS 10.7.3

ゴール

MainMenu.xibとは別のXIBにいくつかのコントロールを備えたウィンドウがあり、そのウィンドウをプログラムで開くことができます。起動時に開かないようにします。

試み

  1. 新しいxib(Woot.xib)を作成し、その中にウィンドウを作成しました
  2. 新しいRubyクラスを作成しました

    class WootController < NSWindowController
        attr_accessor :window
        def windowNibName
             return 'Woot'
        end
    end
    
  3. Woot.xibのFile'sOwnerのクラスをWootControllerに設定しようとしましたが、クラス定義にある場合はそうではないことがわかりました。< NSWindowControllerクラス定義からを削除する< NSWindowControllerと、アウトレットが作成され、XIBのウィンドウをクラスのウィンドウアウトレットにリンクできます。
  4. AppDelegateのapplicationDidFinishLaunchingメソッドの中から、試してみました

    試み

    newWind = WootController.new
    puts newWind #outputs "#<AddCredentialsDialog:0x400191180>"
    newWind.window().makeKeyAndOrderFront(self) # results in no method error for nil
    

    試行2

    newWind = WootController.initWithWindowNibName 'AddWindow'
    puts newWind #outputs "#<AddCredentialsDialog:0x400191180>"
    newWind.window().makeKeyAndOrderFront(self) # results in no method error for nil
    

質問

  1. どちらの試みもうまくいかないのはなぜですか?私はmacrubyとNSWindowControllerを使用して見つけることができるほぼすべての準備ができています。
  2. WootControllerクラスを継承しているのに、クラスをリンクできないのはなぜですかNSWindowController
  3. すべてをMainMenu.xibに配置する以外に、これを行う別の方法はありますか?
4

1 に答える 1

1

このソリューションは機能します

nib = NSNib.alloc.initWithNibNamed('Woot', bundle: nil)
newWind = WootController.new
nib.instantiateNibWithOwner(newWind, topLevelObjects:nil)
newWind.showWindow(self)

注意事項

  1. Macruby では、メソッド シグネチャに名前付きパラメータがある場合は、単に nil を指定した場合でもそれらを使用する必要があります。そうしないと、メソッド シグネチャが一致せず、no methodエラーが発生します。

    すなわち。obj.foo('hello', to_whom: nil)と同じではありませんobj.foo('hello')

  2. 名前付きパラメーターがある場合は、括弧を使用する必要があります。

    すなわち。これでは なくobj.foo('hello', to_whom: nil)、これが機能します obj.foo 'hello', to_whom: nil

于 2012-06-05T13:32:30.510 に答える