Hi Laurent,
The work around you suggested works.
Also, after a clean build the automatic loading of framework and bridgeSupport
file worked as well.
Thanks very much,
Alan
On 22 Nov 2010, at 02:55, Laurent Sansonetti wrote:
> Hi Alan,
>
> Thanks for reporting that problem in the tracker. In the meantime, keeping a
> reference to the Proc object in the Ruby side might work around the problem
> (as I suspect that the proc here is being garbage-collected prematurely).
>
> @b = TestBlock.alloc.initWithBlock (@tmp ||= Proc.new { puts "hello
> from ruby"})
>
> Laurent
>
> On Nov 19, 2010, at 3:25 AM, Alan Skipp wrote:
>
>> Whoops, sorry about that. I find that I can get away without assigning to
>> self in 'init' when doing a quick hack, but certainly not the recommended
>> approach, especially when attempting to track down another bug.
>> I've amended the initializer now and I still encounter the same problem.
>>
>> Al
>>
>> On 19 Nov 2010, at 10:53, Thibault Martin-Lagardette wrote:
>>
>>> Hi Alan,
>>>
>>> I didn't look in further details yet, but clearly your initWithBlock method
>>> is wrong, it should be:
>>>
>>> - (id)initWithBlock:(void (^)())aBlock;
>>> {
>>> if ((self = [super init])) {
>>> block = [aBlock copy];
>>> NSLog(@"Block: %@", block);
>>> block();
>>> }
>>> return self;
>>> }
>>>
>>> You are not assigning `self` to be equal to what `[super init]` returns,
>>> and this is, even without macruby or blocks, prone to crashes :-)
>>>
>>> Can you try to fix this and then tell us if it's still crashing?
>>>
>>> --
>>> Thibault Martin-Lagardette
>>>
>>>
>>>
>>> On Nov 19, 2010, at 10:14, Alan Skipp wrote:
>>>
>>>> I've been attempting to get an objective-c framework to work with macruby
>>>> and I believe I've found a bug in the way ruby Proc objects are copied
>>>> when used as objective-c blocks.
>>>> The copied block doesn't seem to persist correctly beyond the scope in
>>>> which it was copied. It isn't deallocated, but calling it results in a
>>>> crash. Typical error messages are:
>>>> wrong type NSCFSet (expected Proc) (TypeError)
>>>> wrong type NSRectSet (expected Proc) (TypeError)
>>>> I'm guessing that there's a pointer to the wrong memory location?
>>>>
>>>> Here's the Objective-C implementation:
>>>>
>>>> @implementation TestBlock
>>>>
>>>> - (id)initWithBlock:(void (^)())aBlock;
>>>> {
>>>> [super init];
>>>> block = [aBlock copy];
>>>> NSLog(@"Block: %@", block);
>>>> block();
>>>> return self;
>>>> }
>>>>
>>>> - (void)callBlock;
>>>> {
>>>> NSLog(@"block: %@", block);
>>>> block();
>>>> }
>>>>
>>>> @end
>>>>
>>>>
>>>> Within 'initWithBlock:', the copied block can be invoked without error.
>>>> Attempting to do so from 'callBlock', results in a crash. The test
>>>> framework can be used without error when using objective-c.
>>>>
>>>> Here's the ruby controller code:
>>>>
>>>> @b = TestBlock.alloc.initWithBlock Proc.new { puts "hello from ruby"}
>>>>
>>>> # this next line is called from a different scope and causes the crash
>>>> @b.callBlock
>>>>
>>>>
>>>> 2010-11-19 08:41:06.620 CallObjectiveCBlocks[7046:a0f] Block:
>>>> <__NSAutoBlock__: 0x200be74a0>
>>>> hello from ruby
>>>>
>>>> 2010-11-19 08:41:20.011 CallObjectiveCBlocks[7046:a0f] block:
>>>> <__NSAutoBlock__: 0x200be74a0>
>>>> 2010-11-19 08:41:20.012 CallObjectiveCBlocks[7046:a0f]
>>>> /Users/alan/Documents/programming/macruby/CallObjectiveCBlocks/build/Debug/CallObjectiveCBlocks.app/Contents/Resources/Controller.rb:21:in
>>>> `call:': wrong type Array (expected Proc) (TypeError)
>>>> from
>>>> /Users/alan/Documents/programming/macruby/CallObjectiveCBlocks/build/Debug/CallObjectiveCBlocks.app/Contents/Resources/rb_main.rb:23:in
>>>> `<main>'
>>>> _______________________________________________
>>>> MacRuby-devel mailing list
>>>> [email protected]
>>>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>>>
>>> _______________________________________________
>>> MacRuby-devel mailing list
>>> [email protected]
>>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>>
>> _______________________________________________
>> MacRuby-devel mailing list
>> [email protected]
>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>
> _______________________________________________
> MacRuby-devel mailing list
> [email protected]
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
_______________________________________________
MacRuby-devel mailing list
[email protected]
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel