我正在使用0.5b1开发一个小型MacRuby项目,该项目正在实现Growl所需的委托方法(该应用程序使用Growl进行通知)。
我希望能够在单击通知时响应Growl回调,但是当您使用::GrowlApplicationBridge.setGrowlDelegate self
注册Growl委托时,它会向代表询问具有Growl注册信息的NSDictionary*
我已经尝试返回一个标准的NSDictionary实例,尝试将对象强制转换为指针等,但每次我看起来都会出现分段错误(我想这是因为我传回一个对象,而不是指向对象)。
我想知道是否有可能获得指向其自身的对象的指针,或者使用p = Pointer.new("NSDictionary")
是否有可能以某种方式分配数据(使用p.assign(dict)
导致类型错误,因为它期待一个整数)。
我想另一种选择是编写一个ObjC类来充当委托,并从Ruby中挂钩,但这有点挫败了目的......
答案 0 :(得分:2)
ruby哈希是MacRuby中的NSDictionary。你应该能够做一些事情:
framework 'Growl'
def registrationDictionaryForGrowl
{'TicketVersion' => 1, 'AllNotifications' => nil, 'ApplicationId' => 'test'}
end
GrowlApplicationBridge.setGrowlDelegate(self)
虽然,我没有为growl字典正确设置密钥(我认为这是由于将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