Указатели на данные, возвращаемые методами-делегатами в MacRuby - PullRequest
0 голосов
/ 13 октября 2009

Я работаю над небольшим проектом MacRuby, использующим 0.5b1, который реализует методы делегирования, необходимые для Growl (приложение использует Growl для уведомлений).

Я хотел бы иметь возможность отвечать на обратные вызовы Growl при нажатии на уведомление, однако, когда вы регистрируете делегата Growl с помощью ::GrowlApplicationBridge.setGrowlDelegate self, он запрашивает у делегата NSDictionary* с регистрационной информацией Growl.

Я пытался вернуть стандартный экземпляр NSDictionary, пытаясь привести объект к указателю и т. Д., Но каждый раз, когда мне кажется, что возникает ошибка сегментации (я думаю, это потому, что я возвращаю объект, а не указатель на объект).

Мне интересно, возможно ли получить указатель на сам объект или, используя p = Pointer.new("NSDictionary"), можно ли как-то назначить данные (использование p.assign(dict) приводит к ошибке типа, так как ожидает целое число ).

Полагаю, что другой вариант - написать класс ObjC, выступающий в роли делегата, и просто подключиться к нему из Ruby, но это несколько противоречит цели ....

1 Ответ

2 голосов
/ 27 октября 2009

Рубиновый хеш - это NSDictionary в MacRuby. Вы должны быть в состоянии сделать что-то вроде:


framework 'Growl'

def registrationDictionaryForGrowl
  {'TicketVersion' => 1, 'AllNotifications' => nil, 'ApplicationId' => 'test'}
end

GrowlApplicationBridge.setGrowlDelegate(self)

Хотя у меня не правильно установлены ключи для словаря рычания (что, я думаю, связано с передачей nil на ключ AllNotifications. Надеюсь, передача массива реальных уведомлений должна работать):


2009-10-27 15:47:12.305 macruby[61552:903] GrowlApplicationBridge: Error writing registration dictionary at /var/folders/8Z/8ZW9lfcxHlWsi+jWQGSXXk+++TI/-Tmp-/macruby-61552-96CEC625-EEE2-49D3-8532-0184DB93E0F4.growlRegDict: Property list invalid for format
...