NSPredicate ne fonctionne pas avec le champ calculé

J'ai un projet de database et j'ai de la difficulté à chercher dans datatables avec un champ calculé simple et je n'ai aucune idée de pourquoi cela ne fonctionne pas.

J'ai une entité Tutor, avec les attributes de string de données de base "tutorFirstName" et "tutorLastName". J'ai créé un atsortingbut de string supplémentaire "tutorFullName" qui est rempli dans une catégorie en tant que telle:

NSSsortingng *fullName = [@[self.tutorFirstName, self.tutorLastName] componentsJoinedBySsortingng:@" "]; 

Les données sont correctement renseignées, mais lorsque j'effectue les searchs suivantes, seuls les prédicats sur le tutorFirstName et le tutorLastName fonctionnent:

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"tutorFirstName = %@", @"Sean"]; [fetchRequest setPredicate:predicate]; NSArray *fetchedObjects = [moc executeFetchRequest:fetchRequest error:&error]; NSLog(@"Search on %@ returned %lu items (%@)",predicate, (unsigned long)fetchedObjects.count, [fetchedObjects objectAtIndex:0]); predicate = [NSPredicate predicateWithFormat:@"tutorFullName = %@", @"Sean Silverman"]; [fetchRequest setPredicate:predicate]; fetchedObjects = [moc executeFetchRequest:fetchRequest error:&error]; NSLog(@"Search on %@ returned %lu items",predicate, (unsigned long)fetchedObjects.count); predicate = [NSPredicate predicateWithFormat:@"tutorLastName = %@", @"Silverman"]; [fetchRequest setPredicate:predicate]; fetchedObjects = [moc executeFetchRequest:fetchRequest error:&error]; NSLog(@"Search on %@ returned %lu items (%@)",predicate, (unsigned long)fetchedObjects.count, [fetchedObjects objectAtIndex:0]); 

Voici le code de debugging montrant les résultats de chaque search et aussi que l'object de données de base résultant DOES a l'input de tutorFullName correcte.

 2014-01-21 14:05:26.129 AT Data[54935:70b] Search on tutorFirstName == "Sean" returned 1 items (<Tutor: 0x113b16830> (entity: Tutor; id: 0xd0000000041c0006 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Tutor/p263> ; data: { charges = ( "0xd000000581b40002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p90221>", "0xd00000058b280002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p90826>", "0xd00000057d4c0002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p89939>", "0xd0000005994c0002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p91731>", "0xd000000593c40002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p91377>", "0xd0000005aa3c0002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p92815>", "0xd0000005ab440002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p92881>", "0xd0000005aa500002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p92820>", "0xd00000057ea00002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p90024>", "0xd0000005a7000002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p92608>", "(...and 595 more...)" ); tutorFirstName = Sean; tutorFullName = "Sean Silverman"; tutorLastName = Silverman; 2014-01-21 14:05:26.130 AT Data[54935:70b] Search on tutorFullName == "Sean Silverman" returned 0 items 2014-01-21 14:05:26.131 AT Data[54935:70b] Search on tutorLastName == "Silverman" returned 1 items (<Tutor: 0x113b16830> (entity: Tutor; id: 0xd0000000041c0006 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Tutor/p263> ; data: { charges = ( "0xd000000581b40002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p90221>", "0xd00000058b280002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p90826>", "0xd00000057d4c0002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p89939>", "0xd0000005994c0002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p91731>", "0xd000000593c40002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p91377>", "0xd0000005aa3c0002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p92815>", "0xd0000005ab440002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p92881>", "0xd0000005aa500002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p92820>", "0xd00000057ea00002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p90024>", "0xd0000005a7000002 <x-coredata://B8C4C087-A68F-4CA6-935D-F596CB1E9D0C/Charge/p92608>", "(...and 595 more...)" ); tutorFirstName = Sean; tutorFullName = "Sean Silverman"; tutorLastName = Silverman; 

La seule chose qui me semble étrange est que, dans la sortie de debugging de l'entité, les attributes de données de base ssortingctes n'ont pas les guillemets autour de la valeur de string, mais l'atsortingbut calculé fait ("Sean Silverman"), mais peut seulement être parce qu'il y a un espace dans l'atsortingbut calculé.

Toute aide serait grandement appréciée.

En calculant, je suppose que vous voulez dire que la propriété est transitoire. Si tel est le cas, vous ne pouvez pas effectuer de search sur ces propriétés. En effet, la propriété peut ne pas être créée au moment où la search est exécutée pour toutes les entités de données de base que vous searchz. À partir du Guide de programmation des données de base (juste après l'inscription 1):

Vous ne pouvez pas extraire à l'aide d'un prédicat basé sur des propriétés transitoires (bien que vous puissiez utiliser les propriétés transitoires pour filterr vous-même dans la memory).

Donc, si vous souhaitez utiliser un prédicat pour filterr sur cette propriété, vous devrez rendre l'atsortingbut non transitoire.