The example of countries is just that, an example. The actual app is about 
something else. Also, the color of the text is not a model property - the 
selected status is.

I think you didn't quite understand what the problem I'm having is. The problem 
is that NSFetchedResultsController is ignoring a transformable attribute used 
as a sorting key.

On Feb 10, 2011, at 2:10 PM, claw wrote:

> hi,
> 
> i want you to propose just an idea , a remark, ....on apple documentation is 
> said
> 
> The NSFetchRequest class is used to describe search criteria used to retrieve 
> data from a persistent store..... implicitely you must record all of them and 
> update them sometimes....
> 
> in your idea there is a lot of different kind of countries ( india, honduras 
> ....) which can have a common property: a selected color that can vary a lot 
> of times....
> 
> why not trying to use an Hash Table in order to use weak reference with 
> NSHashTable ??....instead of each time ask core data to update all the entire 
> store.... 
> 
> best regards
> 
> 
> 
> 
> Le 10 févr. 2011 à 16:19, WT a écrit :
> 
>> Hello list,
>> 
>> a little while ago I posted a question regarding some strange behavior by an 
>> NSFetchedResultsController (under the same subject line as this message). 
>> Since then I've narrowed the problem down a bit more and now have a test 
>> project to show it.
>> 
>> Here's what the goal is, in a nutshell.
>> 
>> I have a list of, say, countries. Some are "selected", others not. I need to 
>> display all the countries in the same tableview, in the same section, and 
>> what differentiates the selected ones from the deselected ones is their text 
>> color. Moreover, the selected ones should be sorted ascending by their 
>> "index" (an integer that's used to keep track of their position in the list) 
>> while the deselected ones must be sorted ascending by their "name".
>> 
>> 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.
>> 
>> Should, but doesn't. And that's the problem I can't seem to solve.
>> 
>> In the test project, I create country entities in the following order
>> 
>> [self createCountryOfName: @"India"];
>> [self createCountryOfName: @"Honduras"];
>> [self createCountryOfName: @"Germany"];
>> [self createCountryOfName: @"Denmark"];
>> [self createCountryOfName: @"Brazil"];
>> [self createCountryOfName: @"Egypt"];
>> [self createCountryOfName: @"Australia"];
>> [self createCountryOfName: @"China"];
>> [self createCountryOfName: @"Finland"];
>> 
>> and make every second one deselected, which *should* result in them being 
>> displayed as follows:
>> 
>> // (ordered by index)
>> // India
>> // Germany
>> // Brazil
>> // Australia
>> // Finland
>> 
>> // (ordered by name)
>> // China
>> // Denmark
>> // Egypt
>> // Honduras
>> 
>> Alas, they're displayed like this (or some other seemingly random order):
>> 
>> (selected)
>> Brazil
>> Germany
>> Australia
>> India
>> Finland
>> 
>> (deselected)
>> Honduras
>> Denmark
>> Egypt
>> China
>> 
>> Neither the selected ones are sorted by their "index" attribute nor the 
>> deselected ones are sorted by their "name" attribute. In fact, the test 
>> project shows that "indexOrName" is not accessed at all when the fetched 
>> results controller does its fetch.
>> 
>> First I thought that there might be something wrong with the way I 
>> implemented the fetched results controller, but if you replace "indexOrName" 
>> in the sort descriptor with either "index" or "name", it works as would be 
>> expected.
>> 
>> So then I thought that using a transformable attribute is not the way to go 
>> in order to achieve the result I need to achieve, but I can't see any other 
>> way to do it.
>> 
>> If using a transformable attribute isn't the way to go, can anyone suggest 
>> an alternative? If using a transformable attribute should work, then why 
>> doesn't it as I've implemented it? It appears to me that 
>> NSFetchedResultsController ignores a sort descriptor based on a 
>> transformable attribute.
>> 
>> The test project can be found here:
>> http://www.restlessbrain.com/FRC_Test.zip
>> 
>> I'd greatly appreciate any help. I've already spent several days trying to 
>> figure this out but got nowhere and ran out of ideas.
>> 
>> Thanks in advance.
>> WT
>> 
>> _______________________________________________
>> 
>> 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/clawfr59%40yahoo.fr
>> 
>> This email sent to clawf...@yahoo.fr
> 

_______________________________________________

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