Указатели на данные, возвращаемые методами делегата в MacRuby

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

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

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

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

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


person Matthew Savage    schedule 12.10.2009    source источник


Ответы (1)


Рубиновый хэш — это 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
person dj2    schedule 27.10.2009
comment
Это кажется многообещающим. Я не могу вспомнить, пробовал ли я это сам, но по памяти я фактически возвращал новый NSDictionary... Мне придется выкопать код и попробовать... спасибо! - person Matthew Savage; 06.11.2009