0

我正在使用 0.5b1 开发一个小型 MacRuby 项目,该项目正在实现 Growl 所需的委托方法(该应用程序使用 Growl 进行通知)。

我希望能够在单击通知时响应 Growl 回调,但是当您向其注册 Growl 委托时,::GrowlApplicationBridge.setGrowlDelegate self它会向委托请求NSDictionary*Growl 注册信息。

我尝试返回一个标准的 NSDictionary 实例,试图将对象强制转换为指针等,但每次我似乎都遇到分段错误(我想这是因为我传回一个对象,而不是指向该对象的指针) .

我想知道是否可以获得指向对象自身的指针,或者使用p = Pointer.new("NSDictionary")是否可以以某种方式分配数据(使用p.assign(dict)会导致类型错误,因为它需要一个整数)。

我想另一种选择是编写一个 ObjC 类来充当委托,并从 Ruby 中挂钩,但这有点违背了目的......

4

1 回答 1

2

ruby 哈希是 MacRuby 中的 NSDictionary。您应该能够按照以下方式做一些事情:


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
于 2009-10-27T19:52:38.133 回答