Когда методу какао нужен селектор в качестве параметра, как мне выразить это в ruby?

В этом руководстве по программированию листов в какао мне говорят вызвать следующий метод:

[[alert beginSheetModalForWindow:[searchField window] 
    modalDelegate:self 
    didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:) 
    contextInfo:nil];

Я написал это следующим образом на рубине:

alert.beginSheetModalForWindow(self.window, 
    modalDelegate:self,
    didEndSelector: :alertDidEnd,
    contextInfo:nil)

Конечно, часть didEndSelector неверна. Позже в моем коде у меня есть метод alertDidEnd, который принимает в качестве аргументов returnCode и contextInfo. Когда я посмотрел на self.methods, я заметил, что метод указан как alertDidEnd:returnCode:contextInfo:. В приведенном выше примере кода '@' используется для обозначения селектора. В Macruby это достигается с помощью символа, но в этом случае символ будет содержать двоеточие, что недопустимо. Как мне представить это имя метода в виде символа? Я не смог найти эту информацию самостоятельно, где я должен был искать, если я не нашел?

Спасибо!


person Ziggy    schedule 18.07.2011    source источник


Ответы (2)


Как отмечено в документах MacRuby, символы связаны с селекторами. Итак, вы бы сделали:

alert.beginSheetModalForWindow(self.window, 
    modalDelegate:self,
    didEndSelector: :'alertDidEnd:returnCode:contextInfo:',
    contextInfo:nil)
person Chuck    schedule 18.07.2011
comment
Хм... все еще не вызывает метод. Должен ли символ включать весь след? Когда я помещаю self.methods.sort, я заметил, что метод alertDidEnd на самом деле называется alertDidEnd:returnCode:contextInfo: . В нем есть куча двоеточий: могу ли я по-прежнему использовать это как символ? - person Ziggy; 19.07.2011
comment
@Ziggy: Да, нужен весь селектор. Я не заметил, что сам селектор отличался в двух фрагментах. Я исправил ответ сейчас. - person Chuck; 19.07.2011
comment
Кажется, это правильный синтаксис, но метод не вызывается. Вы ответили на мой вопрос, но, кажется, где-то еще что-то сломано. Вернуться к работе! - person Ziggy; 19.07.2011

Вы пробовали использовать символ? Кажется, это работает в RubyCocoa.

person Lily Ballard    schedule 18.07.2011