1

我正在使用 MacRuby 0.5 运行并且我有一个方法:

 attr_accessor :bookmarkSheet, :mainWindow

def createBookmark(sender)
  NSApp.beginSheet(bookmarkSheet, 
   modalForWindow:mainWindow, 
   modalDelegate:self, 
   didEndSelector:nil,
   contextInfo:nil)   
 end

这应该在主窗口上打开一个工作表面板。但是,每当我运行此方法时,我都会得到

2009-10-10 12:27:45.270 Application[45467:a0f] nil is not a symbol

关于我为什么会收到此错误的任何想法?我似乎找不到任何地方列出我收到此错误的原因。谢谢

4

3 回答 3

1

彼得是对的,didEndSelector: 期待一个选择器,你应该尝试类似:

def bookmark_created
 puts "Bookmark created"
end

def createBookmark(sender)
  NSApp.beginSheet(bookmarkSheet, 
   modalForWindow:mainWindow, 
   modalDelegate:self, 
   didEndSelector:"bookmark_created:",
   contextInfo:nil)   
 end

请注意我是如何在要调用的方法名称后添加一个冒号的。此外,它看起来像 MacRuby 测试版的一个错误,我鼓励您在 MacRuby 跟踪器上报告该错误:http: //www.macruby.org/trac/newticket

这是Apple文档给出的示例:

- (void)showCustomDialog: (NSWindow *)window
// User has asked to see the dialog. Display it.
{
    if (!myCustomDialog)
        [NSBundle loadNibNamed: @"MyCustomDialog" owner: self];

    [NSApp beginSheet: myCustomDialog
            modalForWindow: window
            modalDelegate: nil
            didEndSelector: nil
            contextInfo: nil];
    [NSApp runModalForWindow: myCustomDialog];
    // Dialog is up here.
    [NSApp endSheet: myCustomDialog];
    [myCustomDialog orderOut: self];
}

如您所见,您应该能够将结束选择器设置为 nil。与此同时,我的解决方法可以正常工作。

祝你好运,

  • 马特
于 2009-10-10T19:20:55.897 回答
0

只是给每个阅读这个线程的人的快速说明。在 MacRuby 中发现错误时,即使您不确定,请通过电子邮件发送邮件列表http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel并提交错误报告:https://www.macruby .org/trac/newticket

你当然也可以在这里发帖并在 Twitter 上提问,但是如果你发现 MacRuby 有问题并且想要修复它,你真的需要提交错误报告。

更新:在这里提交的票。(检查票的状态更新)

谢谢,

于 2009-10-10T19:48:03.377 回答
0

Because you're passing nil as the didEndSelector:. You need to pass a selector there.

于 2009-10-10T17:21:03.690 回答