由MacRuby中的委托方法返回的数据的指针

时间:2009-10-12 21:33:18

标签: objective-c pointers macruby

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

我希望能够在单击通知时响应Growl回调,但是当您使用::GrowlApplicationBridge.setGrowlDelegate self注册Growl委托时,它会向代表询问具有Growl注册信息的NSDictionary*

我已经尝试返回一个标准的NSDictionary实例,尝试将对象强制转换为指针等,但每次我看起来都会出现分段错误(我想这是因为我传回一个对象,而不是指向对象)。

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

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

1 个答案:

答案 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