[MacRuby-devel] Implementing Undo In RaiseMan / MacRuby

John Shea johnmacshea at gmail.com
Tue Oct 27 04:38:28 PDT 2009


Steve,

I am not sure what stage you are at with your example, I originally did this
without using an array controller, and the undoing worked fine.

I just threw together a version with an array controller - and the
insertObject(person,
inEmployeesAtIndex:index) and remove methods are being called by the array
controller - however they seem to be passing the index as a nil. Perhaps
this is what Ernest was talking about - an unboxing issue??
Undoing initially works.

Selecting the second row, and then pressing insert causes a crash into the
debugger - so perhaps again some issue with what method the array controller
is calling or trying to call  (and the vars it is trying to pass)  - as
Ernest implied (?).

Note that this experiment was still with 0.4.
Perhaps it works ok in later versions?

I personally have not come across this issue before because I never use the
arraycontroller method insert and remove - I always have my own controller
methods - usually I want to check other things before adding or removing (I
believe later in the book the array controller methods are replaced with own
methods).

Not a solution but perhaps you can work around it, by using your own
controller actions, and then exploring the undo aspects?

Cheers,
John

On Mon, Oct 26, 2009 at 4:06 PM, s.ross <cwdinfo at gmail.com> wrote:

> John--
>
> I've started a github repo at http://github.com/sxross/raiseman-rb, but it
> doesn't yet reflect that I can now do initial editing of an inserted row,
> but undo is not there yet.
>
> Thanks,
>
> Steve
>
>
> On Oct 26, 2009, at 1:22 AM, John Shea wrote:
>
> Hi Steve,
> did you solve this one?
> if not perhaps you could post somewhere the MyDocument.rb code for us to
> look at?
> Cheers,
> J
>
> On Sun, Oct 25, 2009 at 7:17 PM, s.ross <cwdinfo at gmail.com> wrote:
>
>> I'm trying to implement the RaiseMan example from Aaron Hillegass's book
>> in MacRuby. All has gone pretty well until I reached undo. The idea is to
>> handle the insertObject message each time a Person is inserted and
>> manipulate the undo stack.
>>
>>   def insertObject(p, inEmployeesAtIndex:index)
>>     NSLog("adding #{p} to #{employees}") # <= Not called, huh?
>>     undo = @undoManager
>>     undo.prepareWithInvocationTarget(self,
>> removeObjectFromEmployeesAtIndex:index)
>>     if !undo.isUndoing
>>       undo.setActionName("Insert Person")
>>     end
>>     employees.insertObject(p, atIndex:index)
>>   end
>>
>> The Objective-C signature for this is:
>>
>> - (void)insertObject:(Person *)p inEmployeesAtIndex:(int)index
>>
>> Works in Objective-C but in my Ruby, the method is not recognized as a
>> handler to be invoked when a Person object is to be inserted in the
>> employees array. I should note that I created the employees array using Ruby
>> syntax:
>>
>> @employees ||= []
>>
>> Changing this to:
>>
>> @employees ||= NSMutableArray.alloc.init
>>
>> makes no difference in this scenario.
>>
>> Any hints with respect to what I'm missing here?
>>
>> Thanks,
>>
>> Steve
>>
>>
>> _______________________________________________
>> MacRuby-devel mailing list
>> MacRuby-devel at lists.macosforge.org
>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>>
>>
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>
>
>
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel at lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-devel/attachments/20091027/3c899de2/attachment-0001.html>


More information about the MacRuby-devel mailing list