MacRuby无法将控制器链接到新窗口xib

时间:2012-06-05 02:40:57

标签: objective-c xcode nswindow macruby nswindowcontroller

我的设置

  • 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中的文件所有者类设置为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
    
  5. 问题

    1. 为什么我的尝试都不起作用?我已经准备好了我可以在macruby上找到并使用NSWindowController的所有内容。
    2. 如果我继承WootController
    3. ,为什么我无法关联我的班级NSWindowController
    4. 除了将其全部放在MainMenu.xib 之外,是否有其他方法可以做到这一点

1 个答案:

答案 0 :(得分:1)

此解决方案有效

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

有些注意事项

  1. 在Macruby中,如果方法签名有命名参数,即使您只指定了nil或方法签名不匹配,必须必须>才能使用它们{1}}错误。

    即。 no methodobj.foo('hello', to_whom: nil)

  2. 不同
  3. 如果有命名参数,必须使用括号。

    即。 obj.foo('hello')将有效,不是 obj.foo('hello', to_whom: nil)