NSArrayController Managing / Sorting NSManagedObjects
NSArrayController Managing / Sorting NSManagedObjects
- Subject: NSArrayController Managing / Sorting NSManagedObjects
- From: Brad Gibbs <email@hidden>
- Date: Fri, 07 Aug 2009 14:50:33 -0700
Hi,
I have an NSTableView that displays a set of Activity objects, which
are subclasses of NSManagedObject, all of which are managed by a
custom NSArrayController. Each Activity has a sortIndex property,
which is used to... wait for it... sort the activities.
The array controller adds logic to update the sortIndex as objects are
added, removed or re-ordered. It's this last part that's giving me
grief. The table supports drag-and-drop. The idea is that when an
Activity is dragged up or down in the list, the sortIndex for all of
the activities get updated, so that the next time the list of
activities is displayed, the activities maintain the order in which
they were placed by the user.
The array controller's sort descriptors binding is bound to an array
with a single NSSortDescriptor, set to order the objects by
sortIndex. I think this is causing some grief. Also, the code that
assigns new sortIndexes for each object calls [arrayController
arrangedObjects] to get the array controller's objects. From my
reading of the documentation, this calls arrangeObjects on the
underlying array, which I don't really want to do until all of the
Activity objects' sortIndexes have been updated to reflect their new
positions in the array.
The objects that are dropped are assigned new sortIndexes based on
their new indexes immediately after being dropped into the array. I'm
not doing anything with the sortIndexes for the items in the array
that haven't been moced until later. In the interim, I believe that
calling [arrayController arrangedObjects] is trying to make the
NSArrayController arrange its objects based on its sort descriptor
(sortIndex), while one or more of the objects in the set share the
same sortIndex. This is causing problems.
I'm hoping someone can point me to some sample code that addresses
this issue. I've looked at Demo Monkey and a couple of other samples
I found on the web without being enlightened. Jonathan Dann has
sample code using sortIndex and an NSTreeController, but updating the
treeController doesn't involve rearranging its items first, so, it
doesn't quite work.
Possible solutions I can see:
1. manually assigning new sortIndexes to all objects from the point
of insertion through the end of the array / set immediately upon
insertion of the moved objects, or:
2. copying the entire array after insertion and then using the copied
array to assign new indexes:
for (Activity *anActivity in activitiesArrayCopy) {
[anActivity setValue:[NSNumber numberWithInt:[activitiesArrayCopy
indexOfObject:anActiviity]] forKey:@"sortIndex"]
}
But, I think there's a cleaner, more elegant solution out there that
I'm not seeing.
Any suggestions would be appreciated.
Thanks.
Brad
_______________________________________________
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