On Feb 10, 2011, at 07:19, WT wrote: > The test project's core data model has a single entity, "CountryCD", with the > attributes "name", "index", "selected" (representing a boolean), and a > transformable attribute "indexOrName" which returns the entity's index if > it's selected or its name if it's deselected. > > - (id) indexOrName; > { > if ([self.selected isEqualToNumber: [NSNumber numberWithBool: YES]]) > { > return self.index; > } > else > { > return self.name; > } > } > > The fetched results controller is defined as usual but contains two sort > descriptors: > > NSSortDescriptor* sortBySelected = [[NSSortDescriptor alloc] > initWithKey: @"selected" ascending: NO]; > > NSSortDescriptor* sortByIndexOrName = [[NSSortDescriptor alloc] > initWithKey: @"indexOrName" ascending: YES]; > > the idea being that entities get sorted first by their "selected" status and > then by their "indexOrName" attribute. Since that attribute returns the > entity's "index" or its "name", depending on the entity's "selected" status, > the fetched results controller *should* sort the entities as desired.
What you've shown above, assuming it's actual code from your managed object subclass, is not a transformable attribute but a derived attribute -- one that depends for its value solely on the values of other properties, and doesn't make use of any backing storage of its own. A transformable attribute is one whose backing storage representation is a different class from its in memory representation, with the translation between the two forms handled automatically by a value transformer. Perhaps you're assuming that Core Data will internally call the above getter to figure out what to put into the store. It doesn't work that way. Most likely your store contains nil values for the "indexOrName" attribute. (I'm assuming your Core Data model actually has an "indexOrName" attribute. If not, it still won't work, but for a different reason.) The thing you're sorting is a fetched results controller. Presumably that sorts itself based on the fetched attribute values (all nil for "indexOrName" in this case), which means that all objects have the same value for the attribute, so the result of sorting is essentially random, as you've seen. You either need to get the actual values of "indexOrName" into the store, or you need to do your own sorting after the objects have been fetched. _______________________________________________ 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