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@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@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@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel


_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel


_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel