***SOLVED*** Re: NSArrayController Managing / Sorting NSManagedObjects
***SOLVED*** Re: NSArrayController Managing / Sorting NSManagedObjects
- Subject: ***SOLVED*** Re: NSArrayController Managing / Sorting NSManagedObjects
- From: Brad Gibbs <email@hidden>
- Date: Sat, 08 Aug 2009 15:36:46 -0700
I found some sample code that addresses this:
http://shanecrawford.org/2008/37/sorting-a-coredata-backed-nsarraycontroller/
On Aug 7, 2009, at 2:50 PM, Brad Gibbs wrote:
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
_______________________________________________
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