• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Multiple NSArrayControllers bound to an NSObjectController
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Multiple NSArrayControllers bound to an NSObjectController


  • Subject: Re: Multiple NSArrayControllers bound to an NSObjectController
  • From: David Spooner <email@hidden>
  • Date: Fri, 9 Nov 2007 09:19:04 -0700


On 9-Nov-07, at 1:52 AM, Boris Yeltsin wrote:

I have a model object that has a name and an array attribute. I have an
array of these model objects bound to an NSArrayController. I can then feed
another NSArrayController with the array attribute of each model object to
create a master-detail inteface. I have one NSTableView that displays the
model objects' names and then another NSTableView that shows the model
object's array properties.

To clarify what follows, I will recount my understanding of the situation: you have a Model object which has a to-many relationship called 'properties', where each element is a Property object with attributes corresponding to the columns of your detail table view.



This works fine. However, as I have been extending this interface
(incorporating drag 'n drop), I have come up against design issues,
particularly in the area of undo. I have been creating a lot of code to make
sure that when I make a change to an NSArrayController's arrangedObjects
array that any changes which are undone affect the correct model object's
array. I have to keep track of sortDescriptors, insertion and deletion
indexes, etc.

I think a better approach is to directly effect the underlying to-many relationship 'properties'. If you have bound the content of your detail array controller to the 'properties' of the selected Model then any mutation of that relationship will be reflected in the array controller. To do this, have your drop method perform its array mutations on


  [selectedModel mutableArrayValueForKey:@"properties"].


Implementing undo support is simplified by adding a category on NSMutableArray with methods such as :


- (void) insertObjects:(NSArray *)objects atIndexes:(NSIndexSet *)indices undo:(NSUndoManager *)undo
{
[[undo prepareWithInvocationTarget:self] removeObjectsAtIndexes:indices undo:undo];
[self insertObjects:objects atIndexes:indices];
}



Performing an undo-able move operation can then be written along the lines of...


NSMutableArray *sourceProperties = [sourceModel mutableArrayValueForKey:@"properties"];
NSMutableArray *targetProperties = [targetModel mutableArrayValueForKey:@"properties"];
NSArray *movingProperties = [sourceProperties objectsAtIndexes:sourceIndices];
[sourceProperties removeObjectsAtIndexes:sourceIndices undo:myUndoManager];
[targetProperties insertObjects:movingProperties atIndexes:targetIndices undo:myUndoManager];



As a consequence, I had an idea. What happened if my model object also had
an NSArrayController in code. When I change selection in the array of my
model objects, the detail NSTableView is connected to my model object's
NSArrayController. I feel like this would obviate a lot of management issues
I am currently experiencing.



My array of model objects is bound to an NSArrayController. I thought I
could use an NSObjectController and bind it to the
selection.controllerkeyPath of the NSArrayController that controls my
model objects and use that
to populate my NSTableView, but it is not working.



Does anyone have any insight? I can include a test session.

I would resist the temptation to add controllers to your model objects...



Boris

Cheers, dave


_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
This email sent to email@hidden


References: 
 >Multiple NSArrayControllers bound to an NSObjectController (From: "Boris Yeltsin" <email@hidden>)

  • Prev by Date: NSCollectionView under the hood?
  • Next by Date: Re: NSLayoutManager and avoiding widows and orphans
  • Previous by thread: Multiple NSArrayControllers bound to an NSObjectController
  • Next by thread: NSCollectionView subclassing
  • Index(es):
    • Date
    • Thread