On Jul 11, 2009, at 14:36, Michael de Haan wrote:

There have been quite a few questions about "RaiseMan" in the archives, but none have addressed this and the documentation that I have read does not answer this either, that I can find. :-). After implementing Undo/Redo in the app, where, in a nutshell, the contentArray of an ArrayController is bound to an NSMutableArray of the model. In order to implement UndoRedo, we make use of the "key- value coding to add and remove" (per Hillegass) objects of the Array.

The documentation is clear as to which methods one needs to implement to comply with KVC , but the one that is missing is a simple "addObject", which I assume one is doing when the user clicks the "Create New Employee" button.

The only two methods implemented by Hillegass are the

-insertObject:in<Key>AtIndex:index;
- (void)removeObjectFrom<Key>AtIndex:(NSUInteger)index;

In order to do this then, does Cocoa simply obtain a count of the array( behind the scenes, so to say, even if this method is not implemented), then use

-insertObject:in<Key>AtIndex:Count  ?

Here's how it works: The NSArray class implements everything but the 5 primitive methods.

addObject: is non-primitive, so NSArray's implementation calls insertObject:atIndex:self.count on your behalf. That behavior comes for free for every NSArray subclass (although any subclass is permitted to override addObject: if it wants to do something different).

When the NSArray subclass is a mutable array proxy (which is the subclass that the array controller uses to get KVO compliance), the proxy's implementation of insertObject:atIndex: calls insertObject:in<Key>AtIndex: if it can find it. (Conceptually, that's what it does. What it actually does we don't know.)

That means that addObject: ends up at your insertObject:in<Key>AtIndex: without your having to write any code.

In NSArrayController's add: or addObject: method, one of which may well be invoked in the button's action, the array controller ends up calling addObject: (or possibly insertObject:atIndex:, we don't really know) for a mutable array proxy for your array property. Whichever one it calls, it gets routed as described above.

The longest invocation chain is probably something like this:

[NSArrayController add:]-->
[NSArrayController addObject:]-->
[NSArray addObject:]-->
["NSMutableArrayProxy" insertObject:atIndex:]-->
["Your" insertObject:in<Key>AtIndex:]-->
[NSArray insertObject:atIndex:]

Clear as mud?


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to