我已经实现了选择器alertDidEnd:returnCode:contextInfo:
。最后一个参数contextInfo是一个void指针。在调用方法之前,我将指针放在一起,如下所示。
# in windowShouldClose
p = Pointer.new(:boolean)
p.assign(true)
然后我调用该方法,并在其体内有以下内容:
# in alertDidEnd
puts p[0] # => a number like 245
puts p.cast!('B')[0] # => false (rather than true)
我做错了什么?这是因为调用方法(windowShouldClose)在这个选择器有机会(只是猜测)之前在自己的线程中完成了吗?
或者我应该将指针创建为对象指针吗?
# make a pointer to an object and assign to it the instance of TrueClass
p = Pointer.new(:id)
p.assign(true)
我已经阅读了O'reilly Macruby Book对此有何看法。
谢谢!
答案 0 :(得分:2)
最可能的原因是没有任何东西保留这个对象,所以它被垃圾收集。如果您创建一个对象并实现其finalize方法并在其中放置一个put,您将能够看到这种情况。
尝试在创建工作表的控制器中跟踪您的状态,并将指针作为contextInfo传递给控制器。如果此状态调解ui元素之间的并发交互,那么负责所有元素的控制器可能无论如何都需要跟踪它。当然,可能更容易不传递contextInfo并使用哪个回调给表单跟踪它所调用的条件。