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

Peterは正しいです、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

nilとして通過しているためdidEndSelector:。そこでセレクターを渡す必要があります。

于 2009-10-10T17:21:03.690 に答える
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 に答える