Hello all,

In my Core Data based application, I have an NSArrayController, and it was 
necessary for me to receive a KVO notification when either a new item was added 
to the array controller, or removed from the array controller.  By looking in 
to some forums, I found out that I cannot do this by observing the 
arrangedObjects property in NSArrayController - some say this is a bug.  So 
instead, I binded the contentArray to a mutable array that I used to add and 
removed objects to or from.  In addition, I added array accessors for the 
mutable array so that the KVO would work as expected.  This now works 
beautifully, and I receive KVO notifications for object insertion and removal, 
as well as have the ability to see which objects were added or removed when 
observeValueForKeyPath:ofObject:change:context: is invoked.

However, in doing this, I lost some of the functionality that came for free 
with Core Data: undo/redo, load/save, etc.  I suppose this is because Core Data 
makes the changes to arrangedObjects (and the mutable array binded to 
contentArray is not touched), and I am no longer observing arrangedObjects.  I 
manually added some undo/redo functionality in the array accessors, but now 
thinking about how to do loading documents.  I would like to stay away from 
observing arrangedObjects, as then I would receive two KVO notifications for 
adding and removing objects in to the NSArrayController (one through the 
contentArray observation and one through the arrangedObjects observation).

I also thought about subclassing NSArrayController so that addObject: performs 
a KVO notifications like so:

[self willChange:NSKeyValueChangeInsertion valuesAtIndexes:indexes 
forKey:@"arrangedObjects"];
[super addObject:object];
[self didChange:NSKeyValueChangeInsertion valuesAtIndexes:indexes 
forKey:@"arrangedObjects"];

This would alleviate the need to use the contentArray property.  However, I am 
assuming this would generate two KVO events - the new insertion notification 
(NSKeyValueChangeInsertion), and the existing change notification 
(NSKeyValueChangeSetting).  I would like to avoid this.

So my question is, is there an easy and efficient way to achieve what I am 
trying to do?

Thank you in advance.

Ajay

_______________________________________________

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